drewlabs/cookie

请求和响应Cookie的面向对象实现

v0.2.0 2023-05-23 10:40 UTC

This package is auto-updated.

Last update: 2024-09-30 01:29:06 UTC


README

drewlabs/cookie库提供了一个用于构建和解析Cookie的对象组件。该库还提供了对Cookie实例的各种不可变方法,以便一旦创建即可更新Cookie实例。

用法

该库为开发者提供了一个用于创建Cookie实例的工厂类。使用cookie factory类创建Cookie实例的语法如下

<?php

use Drewlabs\Cookie\Factory;

// Creates a session cookie with name and value as first parameters
$cookie = Factory::new()->create('sessionId',uniqid('session').time(), 0);

使用factory类,开发者可以从原始Cookie字符串创建Cookie实例

use Drewlabs\Cookie\Factory;

$expiresAt = (new \DateTimeImmutable())->format('U');
$cookie = Factory::new()->createFromString("sessionId=e8bb43229de9; Expires=$expiresAt; Domain=foo.example.com; Path=/; Secure; HttpOnly");

注意使用工厂类是创建Cookie实例的推荐方法,但您也可以使用Cookie类的构造函数来创建cookie实例。构造函数接受与Factory::create()方法相同的参数。有关支持的参数的更多信息,请参阅文档参考。

基本Cookie API

创建cookie实例后,您可以通过创建Cookie的修改实例来修改其值。为了避免与内部状态变化相关的面向对象问题,cookie API不会直接修改其内部状态...而是提供方法来创建源实例的修改副本。以下是更新cookie实例值的方法列表

  • withValue

    <?php
    $cookie = Factory::new()->create('id', "oldCookieValue");
    
    $cookie2 = $cookie->withValue("newCookieValue");
    
    echo $cookie->getValue(); // oldCookieValue
    echo $cookie2->getValue(); //newCookieValue
  • withDomain

    withDomain方法允许您更新为生成Cookie的域名。

    <?php
    $cookie = Factory::new()->create('id', uniqid('cookie').time());
    $cookie2 = $cookie->withDomain("com.azlabs.xyz");
    
    echo $cookie->getDomain(); // null
    echo $cookie2->getDomain(); //com.azlabs.xyz
  • withPath

    withPath方法更新可能应用Cookie的URL路径。

    <?php
    $cookie = Factory::new()->create('id', uniqid('cookie').time());
    $cookie2 = $cookie->withPath("/auth");
    
    echo $cookie->getPath(); // /
    echo $cookie2->getPath(); // /auth
  • withHttpOnly withHttpOnly将Cookie更新为仅通过HTTP头发送,不会被任何前端代码修改。它告诉浏览器强制执行Cookie规则并保护Cookie免受前端攻击。

    $cookie = Factory::new()->create('id', uniqid('cookie').time());
    $cookie2 = $cookie->withHttpOnly();
  • withSecure withSecure通过强制浏览器通过安全连接发送Cookie来强制执行Cookie规则。

    <?php
    $cookie = Factory::new()->create('id', uniqid('cookie').time());
    $cookie2 = $cookie->withSecure();
  • __toString() cookie实例API还提供了一个__toString()方法,允许您将cookie对象转换为字符串表示形式,该表示形式可用于用作Set-Cookie头的值。