1 关注者

类 yii\web\Session

继承yii\web\Session » yii\base\Component » yii\base\BaseObject
实现ArrayAccess, Countable, IteratorAggregate, yii\base\Configurable
子类yii\web\CacheSession, yii\web\DbSession, yii\web\MultiFieldSession
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/web/Session.php

Session 提供会话数据管理和相关配置。

Session 是一个 Web 应用程序组件,可以通过 Yii::$app->session 访问。

要启动会话,请调用 open();要完成并发送会话数据,请调用 close();要销毁会话,请调用 destroy().

Session 可以像数组一样使用,用于设置和获取会话数据。例如,

$session = new Session;
$session->open();
$value1 = $session['name1'];  // get session variable 'name1'
$value2 = $session['name2'];  // get session variable 'name2'
foreach ($session as $name => $value) // traverse all session variables
$session['name3'] = $value3;  // set session variable 'name3'

Session 可以扩展以支持自定义会话存储。为此,请覆盖 $useCustomStorage 以便它返回 true,并使用实际的逻辑覆盖这些方法以使用自定义存储:openSession(), closeSession(), readSession(), writeSession(), destroySession()gcSession().

Session 还支持一种特殊的会话数据类型,称为闪存消息。闪存消息仅在当前请求和下一个请求中可用。之后,它将被自动删除。闪存消息特别适用于显示确认消息。要使用闪存消息,只需调用 setFlash()getFlash() 等方法。

有关 Session 的更多详细信息和使用信息,请参阅 关于会话的指南文章.

公共属性

隐藏继承的属性

属性 类型 描述 定义
$_forceRegenerateId 字符串| 在 useStrictMode 启用且需要重新生成会话 ID 的情况下,保存会话 ID yii\web\Session
$_originalSessionModule 字符串| 保存原始会话模块(在注册自定义处理程序之前),以便在使用没有自定义处理程序的 Session 组件之后,可以使用自定义处理程序的 Session 组件。 yii\web\Session
$allFlashes 数组 闪存消息(键 => 消息或键 => [消息 1, 消息 2])。 yii\web\Session
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$cacheLimiter 字符串 当前缓存限制器。 yii\web\Session
$cookieParams 数组 会话 Cookie 参数。 yii\web\Session
$count 整数 会话变量的数量。 yii\web\Session
$flash 字符串 标识闪存消息的键。 yii\web\Session
$flashParam 字符串 存储闪存消息数据的会话变量的名称。 yii\web\Session
$gCProbability 浮点数 每次会话初始化时启动 GC(垃圾回收)进程的概率(百分比)。 yii\web\Session
$handler SessionHandlerInterface|数组 实现 SessionHandlerInterface 的对象或配置数组。 yii\web\Session
$hasSessionId 布尔值 当前请求是否已发送会话 ID。 yii\web\Session
$id 字符串 当前会话 ID。 yii\web\Session
$isActive 布尔值 会话是否已启动。 yii\web\Session
$iterator yii\web\SessionIterator 用于遍历会话变量的迭代器。 yii\web\Session
$name 字符串 当前会话名称。 yii\web\Session
$savePath 字符串 当前会话保存路径,默认为 '/tmp'。 yii\web\Session
$timeout 整数 数据被视为“垃圾”并清除后的秒数。 yii\web\Session
$useCookies 布尔值| 指示是否应使用 Cookie 来存储会话 ID 的值。 yii\web\Session
$useCustomStorage 布尔值 是否使用自定义存储。 yii\web\Session
$useStrictMode 布尔值 是否启用严格模式。 yii\web\Session
$useTransparentSessionID 布尔值 是否启用透明 sid 支持,默认为 false。 yii\web\Session

受保护的属性

隐藏继承的属性

属性 类型 描述 定义

公共方法

隐藏继承的方法

方法 描述 定义
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法在通过克隆现有对象创建对象后调用。 yii\base\Component
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\base\Component
__isset() 检查属性是否已设置,即已定义且不为空。 yii\base\Component
__set() 设置组件属性的值。 yii\base\Component
__unset() 将组件属性设置为 null。 yii\base\Component
addFlash() 添加闪存消息。 yii\web\Session
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
behaviors() 返回此组件应表现为的行为列表。 yii\base\Component
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\Component
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\Component
className() 返回此类的完全限定名称。 yii\base\BaseObject
close() 结束当前会话并存储会话数据。 yii\web\Session
count() 返回会话中的项目数量。 yii\web\Session
destroy() 释放所有会话变量并销毁注册到会话的所有数据。 yii\web\Session
detachBehavior() 从组件中分离行为。 yii\base\Component
detachBehaviors() 从组件中分离所有行为。 yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件。 yii\base\Component
get() 使用会话变量名称返回会话变量值。 yii\web\Session
getAllFlashes() 返回所有闪存消息。 yii\web\Session
getBehavior() 返回命名行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
getCacheLimiter() 返回当前缓存限制器 yii\web\Session
getCookieParams() yii\web\Session
getCount() 返回会话中的项目数量。 yii\web\Session
getFlash() 返回闪存消息。 yii\web\Session
getGCProbability() yii\web\Session
getHasSessionId() 返回一个值,指示当前请求是否已发送会话 ID。 yii\web\Session
getId() 获取会话 ID。 yii\web\Session
getIsActive() yii\web\Session
getIterator() 返回用于遍历会话变量的迭代器。 yii\web\Session
getName() 获取当前会话的名称。 yii\web\Session
getSavePath() 获取当前会话保存路径。 yii\web\Session
getTimeout() yii\web\Session
getUseCookies() 返回一个值,指示是否应使用 Cookie 来存储会话 ID。 yii\web\Session
getUseCustomStorage() 返回一个值,指示是否使用自定义会话存储。 yii\web\Session
getUseStrictMode() yii\web\Session
getUseTransparentSessionID() yii\web\Session
has() yii\web\Session
hasEventHandlers() 返回一个值,指示是否已将任何处理程序附加到指定的事件。 yii\base\Component
hasFlash() 返回一个值,指示是否与指定键关联了闪存消息。 yii\web\Session
hasMethod() 返回一个值,指示是否定义了方法。 yii\base\Component
hasProperty() 返回一个值,指示是否为此组件定义了属性。 yii\base\Component
init() 初始化应用程序组件。 yii\web\Session
off() 从该组件分离现有的事件处理程序。 yii\base\Component
offsetExists() 此方法是接口 ArrayAccess 所需的。 yii\web\Session
offsetGet() 此方法是接口 ArrayAccess 所需的。 yii\web\Session
offsetSet() 此方法是接口 ArrayAccess 所需的。 yii\web\Session
offsetUnset() 此方法是接口 ArrayAccess 所需的。 yii\web\Session
on() 将事件处理程序附加到事件。 yii\base\Component
open() 启动会话。 yii\web\Session
regenerateID() 使用新生成的 ID 更新当前会话 ID。 yii\web\Session
remove() 删除会话变量。 yii\web\Session
removeAll() 删除所有会话变量。 yii\web\Session
removeAllFlashes() 删除所有闪存消息。 yii\web\Session
removeFlash() 删除闪存消息。 yii\web\Session
set() 添加会话变量。 yii\web\Session
setCacheLimiter() 设置缓存限制器 yii\web\Session
setCookieParams() 设置会话 cookie 参数。 yii\web\Session
setFlash() 设置闪存消息。 yii\web\Session
setGCProbability() yii\web\Session
setHasSessionId() 设置一个值,指示当前请求是否已发送会话 ID。 yii\web\Session
setId() 设置会话 ID。 yii\web\Session
setName() 设置当前会话的名称。 yii\web\Session
setSavePath() 设置当前会话保存路径。 yii\web\Session
setTimeout() yii\web\Session
setUseCookies() 设置一个值,指示是否应使用 cookie 来存储会话 ID。 yii\web\Session
setUseStrictMode() yii\web\Session
setUseTransparentSessionID() yii\web\Session
trigger() 触发事件。 yii\base\Component

受保护方法

隐藏继承的方法

方法 描述 定义
freeze() 如果已启动会话,则无法编辑会话 ini 设置。 在 PHP7.2+ 中,它会引发异常。 yii\web\Session
registerSessionHandler() 注册会话处理程序。 yii\web\Session
unfreeze() 启动会话并将数据从临时变量恢复 yii\web\Session
updateFlashCounters() 更新闪存消息的计数器并删除过时的闪存消息。 yii\web\Session

属性详细信息

隐藏继承的属性

$_forceRegenerateId 受保护属性

在 useStrictMode 启用且需要重新生成会话 ID 的情况下,保存会话 ID

protected string|null $_forceRegenerateId null
$_originalSessionModule 受保护静态属性

保存原始会话模块(在注册自定义处理程序之前),以便在使用没有自定义处理程序的 Session 组件之后,可以使用自定义处理程序的 Session 组件。

protected static string|null $_originalSessionModule null
$allFlashes 公开属性

闪存消息(键 => 消息或键 => [消息 1, 消息 2])。

public array $allFlashes null
$cacheLimiter 公开属性

当前缓存限制器。

public string $cacheLimiter null
$cookieParams 公开属性

会话 Cookie 参数。

public array $cookieParams null
$count 公开属性

会话变量的数量。

public integer $count null
$flash 公开属性

标识闪存消息的键。 请注意,闪存消息和普通会话变量共享同一个命名空间。 如果您使用相同名称的普通会话变量,则该变量的值将被此方法覆盖。

public string $flash null
$flashParam 公开属性

存储闪存消息数据的会话变量的名称。

public string $flashParam '__flash'
$gCProbability 公开属性

每次会话初始化时启动 GC(垃圾回收)进程的概率(百分比)。

public float $gCProbability null
$handler 公开属性

实现 SessionHandlerInterface 的对象或配置数组。 如果设置,将用于提供持久性而不是内置方法。

$hasSessionId 公开属性

当前请求是否已发送会话 ID。

public boolean $hasSessionId null
$id 公开属性

当前会话 ID。

public string $id null
$isActive 公开属性

会话是否已启动。

public boolean $isActive null
$iterator 公共 只读 属性

用于遍历会话变量的迭代器。

$name 公共 属性

当前会话名称。

public string $name null
$savePath 公共 属性

当前会话保存路径,默认为 '/tmp'。

public string $savePath null
$timeout 公共 属性

数据被视为“垃圾”并被清理掉之前的秒数。默认值为 1440 秒(或 php.ini 中设置的“session.gc_maxlifetime”的值)。

public integer $timeout null
$useCookies 公共 属性

指示是否应使用 Cookie 来存储会话 ID 的值。

public boolean|null $useCookies null
$useCustomStorage 公共 属性

是否使用自定义存储。

public boolean $useCustomStorage null
$useStrictMode 公共 属性

是否启用严格模式。

public boolean $useStrictMode null
$useTransparentSessionID 公共 属性

是否启用透明 sid 支持,默认为 false。

方法详情

隐藏继承的方法

__call() 公共 方法

定义于: yii\base\Component::__call()

调用不是类方法的命名方法。

此方法将检查是否有任何附加的行为具有命名的方法,如果可用,将执行它。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在调用未知方法时会隐式调用。

public mixed __call ( $name, $params )
$name 字符串

方法名

$params 数组

方法参数

返回值 mixed

方法返回值

抛出异常 yii\base\UnknownMethodException

调用未知方法时

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公共 方法

定义于: yii\base\Component::__clone()

此方法在通过克隆现有对象创建对象后调用。

它会删除所有行为,因为它们附加到旧对象。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() 公共 方法

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现做两件事

  • 使用给定的配置 $config 初始化对象。
  • 调用 init()

如果此方法在子类中被覆盖,建议

  • 构造函数的最后一个参数是一个配置数组,就像这里的 $config 一样。
  • 在构造函数的最后调用父实现。
public void __construct ( $config = [] )
$config 数组

将用于初始化对象属性的键值对

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公共 方法

定义于: yii\base\Component::__get()

返回组件属性的值。

此方法将按以下顺序检查并相应地执行

  • 由 getter 定义的属性:返回 getter 的结果
  • 行为的属性:返回行为的属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $value = $component->property; 时会隐式调用。

另请参阅 __set()

public mixed __get ( $name )
$name 字符串

属性名

返回值 mixed

属性值或行为的属性值

抛出异常 yii\base\UnknownPropertyException

如果未定义属性

抛出异常 yii\base\InvalidCallException

如果属性是只写属性。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公共 方法

定义于: yii\base\Component::__isset()

检查属性是否已设置,即已定义且不为空。

此方法将按以下顺序检查并相应地执行

  • 由 setter 定义的属性:返回属性是否已设置
  • 行为的属性:返回属性是否已设置
  • 对于不存在的属性返回 false

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 isset($component->property) 时会隐式调用。

另请参阅 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name 字符串

属性名或事件名

返回值 布尔值

命名属性是否已设置

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公共方法

定义于: yii\base\Component::__set()

设置组件属性的值。

此方法将按以下顺序检查并相应地执行

  • 通过 setter 方法定义的属性:设置属性值
  • "on xyz" 格式的事件:将处理程序附加到 "xyz" 事件
  • "as xyz" 格式的行为:附加名为 "xyz" 的行为
  • 行为的属性:设置行为属性值

请勿直接调用此方法,因为它是一个 PHP 魔术方法,将在执行 $component->property = $value; 时被隐式调用。

另请参见 __get().

public void __set ( $name, $value )
$name 字符串

属性名或事件名

$value mixed

属性值

抛出异常 yii\base\UnknownPropertyException

如果未定义属性

抛出异常 yii\base\InvalidCallException

如果属性是只读的。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() 公共方法

定义于: yii\base\Component::__unset()

将组件属性设置为 null。

此方法将按以下顺序检查并相应地执行

  • 通过 setter 方法定义的属性:将属性值设置为 null
  • 行为的属性:将属性值设置为 null

请勿直接调用此方法,因为它是一个 PHP 魔术方法,将在执行 unset($component->property) 时被隐式调用。

另请参见 https://php.ac.cn/manual/en/function.unset.php.

public void __unset ( $name )
$name 字符串

属性名

抛出异常 yii\base\InvalidCallException

如果属性是只读的。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
addFlash() 公共方法

添加闪存消息。

如果存在具有相同键的闪存消息,则新消息将被追加到现有消息数组。

另请参见

public void addFlash ( $key, $value true, $removeAfterAccess true )
$key 字符串

标识闪存消息的键。

$value mixed

闪存消息

$removeAfterAccess 布尔值

闪存消息是否应该仅在访问时自动删除。如果为 false,则闪存消息将在下次请求后自动删除,无论是否访问。如果为 true(默认值),则闪存消息将保留到访问后。

                public function addFlash($key, $value = true, $removeAfterAccess = true)
{
    $counters = $this->get($this->flashParam, []);
    $counters[$key] = $removeAfterAccess ? -1 : 0;
    $_SESSION[$this->flashParam] = $counters;
    if (empty($_SESSION[$key])) {
        $_SESSION[$key] = [$value];
    } elseif (is_array($_SESSION[$key])) {
        $_SESSION[$key][] = $value;
    } else {
        $_SESSION[$key] = [$_SESSION[$key], $value];
    }
}

            
attachBehavior() 公共方法

定义于: yii\base\Component::attachBehavior()

将行为附加到此组件。

此方法将根据给定的配置创建行为对象。之后,行为对象将通过调用 yii\base\Behavior::attach() 方法附加到此组件。

另请参见 detachBehavior().

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name 字符串

行为的名称。

$behavior string|array|yii\base\Behavior

行为配置。它可以是以下之一

返回值 yii\base\Behavior

行为对象

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公共方法

定义于: yii\base\Component::attachBehaviors()

将行为列表附加到组件。

每个行为都由其名称索引,并且应该是一个 yii\base\Behavior 对象、一个指定行为类的字符串或一个用于创建行为的配置数组。

另请参见 attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors 数组

要附加到组件的行为列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
behaviors() 公共方法

定义于: yii\base\Component::behaviors()

返回此组件应表现为的行为列表。

子类可以重写此方法以指定它们想要表现出的行为。

此方法的返回值应该是一个由行为名称索引的行为对象或配置数组。行为配置可以是指定行为类的字符串,也可以是以下结构的数组

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

请注意,行为类必须扩展自 yii\base\Behavior。行为可以使用名称或匿名方式附加。当使用名称作为数组键时,使用此名称,行为可以稍后使用 getBehavior() 检索,或者使用 detachBehavior() 分离。匿名行为无法检索或分离。

在此方法中声明的行为将自动附加到组件(按需)。

public array behaviors ( )
返回值 数组

行为配置。

                public function behaviors()
{
    return [];
}

            
canGetProperty() 公共方法

定义于: yii\base\Component::canGetProperty()

返回一个值,指示是否可以读取属性。

如果属性可以读取,则

  • 该类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的可读属性(当 $checkBehaviors 为 true 时)。

另请参见 canSetProperty().

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

是否将行为的属性视为此组件的属性

返回值 布尔值

属性是否可以读取

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() 公共方法

定义于: yii\base\Component::canSetProperty()

返回一个值,指示是否可以设置属性。

如果属性可以写入,则

  • 该类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的可写属性(当 $checkBehaviors 为 true 时)。

另请参见 canGetProperty().

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

是否将行为的属性视为此组件的属性

返回值 布尔值

属性是否可以写入

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
className() 公共静态方法
已弃用,从 2.0.14 版本开始。在 PHP >= 5.5 版本中,使用 ::class 代替。

定义在: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
返回值 字符串

此类的完整限定名称。

                public static function className()
{
    return get_called_class();
}

            
close() 公共方法

结束当前会话并存储会话数据。

public void close ( )

                public function close()
{
    if ($this->getIsActive()) {
        YII_DEBUG ? session_write_close() : @session_write_close();
    }
    $this->_forceRegenerateId = null;
}

            
count() 公共方法

返回会话中的项目数量。

此方法由 Countable 接口要求。

public integer count ( )
返回值 整数

会话中的项目数量。

                #[\ReturnTypeWillChange]
public function count()
{
    return $this->getCount();
}

            
destroy() 公共方法

释放所有会话变量并销毁注册到会话的所有数据。

当会话不 处于活动状态 时,此方法没有效果。在调用它之前,请确保调用 open()

另请参见

public void destroy ( )

                public function destroy()
{
    if ($this->getIsActive()) {
        $sessionId = session_id();
        $this->close();
        $this->setId($sessionId);
        $this->open();
        session_unset();
        session_destroy();
        $this->setId($sessionId);
    }
}

            
detachBehavior() 公共方法

定义在: yii\base\Component::detachBehavior()

从组件中分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name 字符串

行为名称。

返回值 yii\base\Behavior|null

已分离的行为。如果行为不存在,则为 null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() 公共方法

定义在: yii\base\Component::detachBehaviors()

从组件中分离所有行为。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() 公共方法

定义在: yii\base\Component::ensureBehaviors()

确保在 behaviors() 中声明的行为已附加到此组件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
freeze() 受保护的方法 (从版本 2.0.14 开始可用)

如果已启动会话,则无法编辑会话 ini 设置。 在 PHP7.2+ 中,它会引发异常。

此函数将会话数据保存到临时变量并停止会话。

protected void freeze ( )

                protected function freeze()
{
    if ($this->getIsActive()) {
        if (isset($_SESSION)) {
            $this->_frozenSessionData = $_SESSION;
        }
        $this->close();
        Yii::info('Session frozen', __METHOD__);
    }
}

            
get() 公共方法

使用会话变量名称返回会话变量值。

如果会话变量不存在,将返回 $defaultValue

public mixed get ( $key, $defaultValue null )
$key 字符串

会话变量名称

$defaultValue mixed

当会话变量不存在时要返回的默认值。

返回值 mixed

会话变量值,如果会话变量不存在,则为 $defaultValue。

                public function get($key, $defaultValue = null)
{
    $this->open();
    return isset($_SESSION[$key]) ? $_SESSION[$key] : $defaultValue;
}

            
getAllFlashes() 公共方法

返回所有闪存消息。

您可能使用此方法在视图文件中显示所有闪存消息

<?php
foreach (Yii::$app->session->getAllFlashes() as $key => $message) {
    echo '<div class="alert alert-' . $key . '">' . $message . '</div>';
} ?>

使用上面的代码,您可以使用 bootstrap alert 类,例如 successinfodanger 作为闪存消息键,以影响 div 的颜色。

请注意,如果您使用 addFlash()$message 将是一个数组,您将不得不调整上面的代码。

另请参见

public array getAllFlashes ( $delete false )
$delete 布尔值

是否在调用此方法后立即删除闪存消息。如果为 false,则在下一个请求中将自动删除闪存消息。

返回值 数组

闪存消息(键 => 消息或键 => [消息 1, 消息 2])。

                public function getAllFlashes($delete = false)
{
    $counters = $this->get($this->flashParam, []);
    $flashes = [];
    foreach (array_keys($counters) as $key) {
        if (array_key_exists($key, $_SESSION)) {
            $flashes[$key] = $_SESSION[$key];
            if ($delete) {
                unset($counters[$key], $_SESSION[$key]);
            } elseif ($counters[$key] < 0) {
                // mark for deletion in the next request
                $counters[$key] = 1;
            }
        } else {
            unset($counters[$key]);
        }
    }
    $_SESSION[$this->flashParam] = $counters;
    return $flashes;
}

            
getBehavior() 公共方法

定义在: yii\base\Component::getBehavior()

返回命名行为对象。

public yii\base\Behavior|null getBehavior ( $name )
$name 字符串

行为名称

返回值 yii\base\Behavior|null

行为对象,如果行为不存在,则为 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公共方法

定义在: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
返回值 yii\base\Behavior[]

附加到此组件的行为列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getCacheLimiter() 公共方法 (从版本 2.0.14 开始可用)

返回当前缓存限制器

public string getCacheLimiter ( )
返回值 字符串

当前缓存限制器

                public function getCacheLimiter()
{
    return session_cache_limiter();
}

            
getCookieParams() 公共方法
public array getCookieParams ( )
返回值 数组

会话 Cookie 参数。

                public function getCookieParams()
{
    return array_merge(session_get_cookie_params(), array_change_key_case($this->_cookieParams));
}

            
getCount() 公共方法

返回会话中的项目数量。

public integer getCount ( )
返回值 整数

会话变量的数量

                public function getCount()
{
    $this->open();
    return count($_SESSION);
}

            
getFlash() 公共方法
public mixed getFlash ( $key, $defaultValue null, $delete false )
$key 字符串

标识闪存消息的键

$defaultValue mixed

如果闪存消息不存在,则返回的值。

$delete 布尔值

是否在调用此方法后立即删除此闪存消息。如果为 false,则闪存消息将在下一个请求中自动删除。

返回值 mixed

闪存消息或一个消息数组,如果使用 addFlash

                public function getFlash($key, $defaultValue = null, $delete = false)
{
    $counters = $this->get($this->flashParam, []);
    if (isset($counters[$key])) {
        $value = $this->get($key, $defaultValue);
        if ($delete) {
            $this->removeFlash($key);
        } elseif ($counters[$key] < 0) {
            // mark for deletion in the next request
            $counters[$key] = 1;
            $_SESSION[$this->flashParam] = $counters;
        }
        return $value;
    }
    return $defaultValue;
}

            
getGCProbability() 公共方法

public float getGCProbability ( )
返回值 浮点数

每次会话初始化时启动 GC(垃圾回收)进程的概率(百分比)。

                public function getGCProbability()
{
    return (float) (ini_get('session.gc_probability') / ini_get('session.gc_divisor') * 100);
}

            
getHasSessionId() 公共方法

返回一个值,指示当前请求是否已发送会话 ID。

默认实现将使用会话名称检查 cookie 和 $_GET。如果您通过其他方式发送会话 ID,您可能需要覆盖此方法或调用 setHasSessionId() 来显式设置是否发送了会话 ID。

public boolean getHasSessionId ( )
返回值 布尔值

当前请求是否已发送会话 ID。

                public function getHasSessionId()
{
    if ($this->_hasSessionId === null) {
        $name = $this->getName();
        $request = Yii::$app->getRequest();
        if (!empty($_COOKIE[$name]) && ini_get('session.use_cookies')) {
            $this->_hasSessionId = true;
        } elseif (!ini_get('session.use_only_cookies') && ini_get('session.use_trans_sid')) {
            $this->_hasSessionId = $request->get($name) != '';
        } else {
            $this->_hasSessionId = false;
        }
    }
    return $this->_hasSessionId;
}

            
getId() 公共方法

获取会话 ID。

这是 PHP session_id() 的包装器。

public string getId ( )
返回值 字符串

当前会话 ID

                public function getId()
{
    return session_id();
}

            
getIsActive() 公共方法

public boolean getIsActive ( )
返回值 布尔值

会话是否已启动

                public function getIsActive()
{
    return session_status() === PHP_SESSION_ACTIVE;
}

            
getIterator() 公共方法

返回用于遍历会话变量的迭代器。

此方法是接口 IteratorAggregate 所必需的。

public yii\web\SessionIterator getIterator ( )
返回值 yii\web\SessionIterator

用于遍历会话变量的迭代器。

                #[\ReturnTypeWillChange]
public function getIterator()
{
    $this->open();
    return new SessionIterator();
}

            
getName() 公共方法

获取当前会话的名称。

这是 PHP session_name() 的包装器。

public string getName ( )
返回值 字符串

当前会话名称

                public function getName()
{
    return session_name();
}

            
getSavePath() 公共方法

获取当前会话保存路径。

这是 PHP session_save_path() 的包装器。

public string getSavePath ( )
返回值 字符串

当前会话保存路径,默认为 '/tmp'。

                public function getSavePath()
{
    return session_save_path();
}

            
getTimeout() 公共方法

public integer getTimeout ( )
返回值 整数

数据被视为“垃圾”并被清理掉之前的秒数。默认值为 1440 秒(或 php.ini 中设置的“session.gc_maxlifetime”的值)。

                public function getTimeout()
{
    return (int) ini_get('session.gc_maxlifetime');
}

            
getUseCookies() 公共方法

返回一个值,指示是否应使用 Cookie 来存储会话 ID。

另请参见 setUseCookies()

public boolean|null getUseCookies ( )
返回值 布尔值|

指示是否应使用 Cookie 来存储会话 ID 的值。

                public function getUseCookies()
{
    if (ini_get('session.use_cookies') === '0') {
        return false;
    } elseif (ini_get('session.use_only_cookies') === '1') {
        return true;
    }
    return null;
}

            
getUseCustomStorage() 公共方法

返回一个值,指示是否使用自定义会话存储。

此方法应该被子类覆盖以返回 true,这些子类实现自定义会话存储。要实现自定义会话存储,请覆盖以下方法:openSession()closeSession()readSession()writeSession()destroySession()gcSession()

public boolean getUseCustomStorage ( )
返回值 布尔值

是否使用自定义存储。

                public function getUseCustomStorage()
{
    return false;
}

            
getUseStrictMode() 公共方法 (版本 2.0.38 之后可用)

另请参见 setUseStrictMode()

public boolean getUseStrictMode ( )
返回值 布尔值

是否启用严格模式。

                public function getUseStrictMode()
{
    if (PHP_VERSION_ID < 50502) {
        return self::$_useStrictModePolyfill;
    }
    return (bool)ini_get('session.use_strict_mode');
}

            
getUseTransparentSessionID() 公共方法

public boolean getUseTransparentSessionID ( )
返回值 布尔值

是否启用透明 sid 支持,默认为 false。

                public function getUseTransparentSessionID()
{
    return ini_get('session.use_trans_sid') == 1;
}

            
has() 公共方法

public boolean has ( $key )
$key mixed

会话变量名

返回值 布尔值

是否存在命名的会话变量

                public function has($key)
{
    $this->open();
    return isset($_SESSION[$key]);
}

            
hasEventHandlers() 公共方法

定义于: yii\base\Component::hasEventHandlers()

返回一个值,指示是否已将任何处理程序附加到指定的事件。

public boolean hasEventHandlers ( $name )
$name 字符串

事件名称

返回值 布尔值

是否有任何处理程序附加到该事件。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasFlash() 公共方法

返回一个值,指示是否与指定键关联了闪存消息。

public boolean hasFlash ( $key )
$key 字符串

标识闪存消息类型的键

返回值 布尔值

在指定键下是否存在任何闪存消息

                public function hasFlash($key)
{
    return $this->getFlash($key) !== null;
}

            
hasMethod() 公共方法

定义于: yii\base\Component::hasMethod()

返回一个值,指示是否定义了方法。

如果定义了方法

  • 该类具有指定名称的方法
  • 附加的行为具有给定名称的方法(当 $checkBehaviors 为 true 时)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name 字符串

属性名

$checkBehaviors 布尔值

是否将行为的方法视为该组件的方法

返回值 布尔值

该方法是否已定义

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() 公共方法

定义于: yii\base\Component::hasProperty()

返回一个值,指示是否为此组件定义了属性。

如果定义了属性

  • 该类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的属性(当 $checkBehaviors 为 true 时)。

另请参见

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

是否将行为的属性视为此组件的属性

返回值 布尔值

该属性是否已定义

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() 公共方法

初始化应用程序组件。

此方法由 IApplicationComponent 要求,并由应用程序调用。

public void init ( )

                public function init()
{
    parent::init();
    register_shutdown_function([$this, 'close']);
    if ($this->getIsActive()) {
        Yii::warning('Session is already started', __METHOD__);
        $this->updateFlashCounters();
    }
}

            
off() 公共方法

定义于: yii\base\Component::off()

从该组件分离现有的事件处理程序。

此方法与 on() 相反。

注意:如果事件名称传递了通配符模式,则只会删除使用此通配符注册的处理程序,而使用与该通配符匹配的普通名称注册的处理程序将保留。

另请参阅 on()

public boolean off ( $name, $handler null )
$name 字符串

事件名称

$handler callable|null

要删除的事件处理程序。如果为 null,则将删除附加到命名事件的所有处理程序。

返回值 布尔值

如果找到处理程序并分离

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
offsetExists() 公共方法

此方法是接口 ArrayAccess 所需的。

public boolean offsetExists ( $offset )
$offset integer|string

要检查的偏移量

                #[\ReturnTypeWillChange]
public function offsetExists($offset)
{
    $this->open();
    return isset($_SESSION[$offset]);
}

            
offsetGet() 公共方法

此方法是接口 ArrayAccess 所需的。

public mixed offsetGet ( $offset )
$offset integer|string

要检索元素的偏移量。

返回值 mixed

偏移量处的元素,如果偏移量处没有元素,则为 null

                #[\ReturnTypeWillChange]
public function offsetGet($offset)
{
    $this->open();
    return isset($_SESSION[$offset]) ? $_SESSION[$offset] : null;
}

            
offsetSet() 公共方法

此方法是接口 ArrayAccess 所需的。

public void offsetSet ( $offset, $item )
$offset integer|string

要设置元素的偏移量

$item mixed

元素值

                #[\ReturnTypeWillChange]
public function offsetSet($offset, $item)
{
    $this->open();
    $_SESSION[$offset] = $item;
}

            
offsetUnset() 公共方法

此方法是接口 ArrayAccess 所需的。

public void offsetUnset ( $offset )
$offset integer|string

要取消设置元素的偏移量

                #[\ReturnTypeWillChange]
public function offsetUnset($offset)
{
    $this->open();
    unset($_SESSION[$offset]);
}

            
on() 公共方法

定义于: yii\base\Component::on()

将事件处理程序附加到事件。

事件处理程序必须是有效的 PHP 回调。以下是一些示例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件处理程序必须以以下签名定义,

function ($event)

其中 $event 是一个 yii\base\Event 对象,其中包含与事件相关的参数。

从 2.0.14 开始,您可以将事件名称指定为通配符模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另请参阅 off()

public void on ( $name, $handler, $data null, $append true )
$name 字符串

事件名称

$handler callable

事件处理程序

$data mixed

触发事件时传递给事件处理程序的数据。当调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。

$append 布尔值

是否将新的事件处理程序追加到现有处理程序列表的末尾。如果为 false,则新的处理程序将插入到现有处理程序列表的开头。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
open() 公共方法

启动会话。

public void open ( )

                public function open()
{
    if ($this->getIsActive()) {
        return;
    }
    $this->registerSessionHandler();
    $this->setCookieParamsInternal();
    YII_DEBUG ? session_start() : @session_start();
    if ($this->getUseStrictMode() && $this->_forceRegenerateId) {
        $this->regenerateID();
        $this->_forceRegenerateId = null;
    }
    if ($this->getIsActive()) {
        Yii::info('Session started', __METHOD__);
        $this->updateFlashCounters();
    } else {
        $error = error_get_last();
        $message = isset($error['message']) ? $error['message'] : 'Failed to start session.';
        Yii::error($message, __METHOD__);
    }
}

            
regenerateID() 公共方法

使用新生成的 ID 更新当前会话 ID。

有关更多详细信息,请参阅 https://php.ac.cn/session_regenerate_id

当会话不 处于活动状态 时,此方法没有效果。在调用它之前,请确保调用 open()

另请参见

public void regenerateID ( $deleteOldSession false )
$deleteOldSession 布尔值

是否删除旧的关联会话文件。

                public function regenerateID($deleteOldSession = false)
{
    if ($this->getIsActive()) {
        // add @ to inhibit possible warning due to race condition
        // https://github.com/yiisoft/yii2/pull/1812
        if (YII_DEBUG && !headers_sent()) {
            session_regenerate_id($deleteOldSession);
        } else {
            @session_regenerate_id($deleteOldSession);
        }
    }
}

            
registerSessionHandler() 受保护方法

注册会话处理程序。

protected void registerSessionHandler ( )
抛出异常 yii\base\InvalidConfigException

                protected function registerSessionHandler()
{
    $sessionModuleName = session_module_name();
    if (static::$_originalSessionModule === null) {
        static::$_originalSessionModule = $sessionModuleName;
    }
    if ($this->handler !== null) {
        if (!is_object($this->handler)) {
            $this->handler = Yii::createObject($this->handler);
        }
        if (!$this->handler instanceof \SessionHandlerInterface) {
            throw new InvalidConfigException('"' . get_class($this) . '::handler" must implement the SessionHandlerInterface.');
        }
        YII_DEBUG ? session_set_save_handler($this->handler, false) : @session_set_save_handler($this->handler, false);
    } elseif ($this->getUseCustomStorage()) {
        if (YII_DEBUG) {
            session_set_save_handler(
                [$this, 'openSession'],
                [$this, 'closeSession'],
                [$this, 'readSession'],
                [$this, 'writeSession'],
                [$this, 'destroySession'],
                [$this, 'gcSession']
            );
        } else {
            @session_set_save_handler(
                [$this, 'openSession'],
                [$this, 'closeSession'],
                [$this, 'readSession'],
                [$this, 'writeSession'],
                [$this, 'destroySession'],
                [$this, 'gcSession']
            );
        }
    } elseif (
        $sessionModuleName !== static::$_originalSessionModule
        && static::$_originalSessionModule !== null
        && static::$_originalSessionModule !== 'user'
    ) {
        session_module_name(static::$_originalSessionModule);
    }
}

            
remove() 公共方法

删除会话变量。

public mixed remove ( $key )
$key 字符串

要删除的会话变量的名称。

返回值 mixed

删除的值,如果不存在此会话变量,则为 null。

                public function remove($key)
{
    $this->open();
    if (isset($_SESSION[$key])) {
        $value = $_SESSION[$key];
        unset($_SESSION[$key]);
        return $value;
    }
    return null;
}

            
removeAll() 公共方法

删除所有会话变量。

public void removeAll ( )

                public function removeAll()
{
    $this->open();
    foreach (array_keys($_SESSION) as $key) {
        unset($_SESSION[$key]);
    }
}

            
removeAllFlashes() 公共方法

删除所有闪存消息。

请注意,闪存消息和普通会话变量共享相同的命名空间。如果您有一个使用相同名称的普通会话变量,则此方法会将其删除。

另请参见

public void removeAllFlashes ( )

                public function removeAllFlashes()
{
    $counters = $this->get($this->flashParam, []);
    foreach (array_keys($counters) as $key) {
        unset($_SESSION[$key]);
    }
    unset($_SESSION[$this->flashParam]);
}

            
removeFlash() 公共方法

删除闪存消息。

另请参见

public mixed removeFlash ( $key )
$key 字符串

标识闪存消息的键。请注意,闪存消息和普通会话变量共享相同的命名空间。如果您有一个使用相同名称的普通会话变量,则此方法会将其删除。

返回值 mixed

删除的闪存消息。如果闪存消息不存在,则为 null。

                public function removeFlash($key)
{
    $counters = $this->get($this->flashParam, []);
    $value = isset($_SESSION[$key], $counters[$key]) ? $_SESSION[$key] : null;
    unset($counters[$key], $_SESSION[$key]);
    $_SESSION[$this->flashParam] = $counters;
    return $value;
}

            
set() 公共方法

添加会话变量。

如果指定的名称已经存在,旧值将被覆盖。

public void set ( $key, $value )
$key 字符串

会话变量名

$value mixed

会话变量值

                public function set($key, $value)
{
    $this->open();
    $_SESSION[$key] = $value;
}

            
setCacheLimiter() 公共方法 (从版本 2.0.14 开始可用)

设置缓存限制器

public void setCacheLimiter ( $cacheLimiter )
$cacheLimiter 字符串

                public function setCacheLimiter($cacheLimiter)
{
    $this->freeze();
    session_cache_limiter($cacheLimiter);
    $this->unfreeze();
}

            
setCookieParams() 公共方法

设置会话 cookie 参数。

传递给此方法的 cookie 参数将与 session_get_cookie_params() 的结果合并。

另请参阅 https://php.ac.cn/manual/en/function.session-set-cookie-params.php

public void setCookieParams ( array $value )
$value 数组

Cookie 参数,有效键包括:lifetimepathdomainsecurehttponly。从 Yii 2.0.21 开始,也支持 sameSite。它需要 PHP 版本 7.3.0 或更高版本。出于安全原因,如果在使用不受支持的 PHP 版本时设置了 sameSite,则会抛出异常。为了跨不同 PHP 版本使用此功能,请先检查版本。例如 `php [

'sameSite' => PHP_VERSION_ID >= 70300 ? yii\web\Cookie::SAME_SITE_LAX : null,

] ` 有关 sameSite 的更多信息,请参阅 https://owasp.org/www-community/SameSite

抛出异常 yii\base\InvalidArgumentException

如果参数不完整。

                public function setCookieParams(array $value)
{
    $this->_cookieParams = $value;
}

            
setFlash() 公共方法

设置闪存消息。

闪存消息将在请求中访问后自动删除,删除将在下一个请求中发生。如果已经存在具有相同键的闪存消息,它将被新消息覆盖。

另请参见

public void setFlash ( $key, $value true, $removeAfterAccess true )
$key 字符串

标识闪存消息的键。 请注意,闪存消息和普通会话变量共享同一个命名空间。 如果您使用相同名称的普通会话变量,则该变量的值将被此方法覆盖。

$value mixed

闪存消息

$removeAfterAccess 布尔值

闪存消息是否应该仅在访问时自动删除。如果为 false,则闪存消息将在下次请求后自动删除,无论是否访问。如果为 true(默认值),则闪存消息将保留到访问后。

                public function setFlash($key, $value = true, $removeAfterAccess = true)
{
    $counters = $this->get($this->flashParam, []);
    $counters[$key] = $removeAfterAccess ? -1 : 0;
    $_SESSION[$key] = $value;
    $_SESSION[$this->flashParam] = $counters;
}

            
setGCProbability() 公共方法

public void setGCProbability ( $value )
$value 浮点数

每次会话初始化时启动 GC(垃圾回收)进程的概率(百分比)。

抛出异常 yii\base\InvalidArgumentException

如果值不在 0 到 100 之间。

                public function setGCProbability($value)
{
    $this->freeze();
    if ($value >= 0 && $value <= 100) {
        // percent * 21474837 / 2147483647 ≈ percent * 0.01
        ini_set('session.gc_probability', floor($value * 21474836.47));
        ini_set('session.gc_divisor', 2147483647);
    } else {
        throw new InvalidArgumentException('GCProbability must be a value between 0 and 100.');
    }
    $this->unfreeze();
}

            
setHasSessionId() 公共方法

设置一个值,指示当前请求是否已发送会话 ID。

提供此方法是为了让您可以覆盖确定是否发送了会话 ID 的默认方式。

public void setHasSessionId ( $value )
$value 布尔值

当前请求是否已发送会话 ID。

                public function setHasSessionId($value)
{
    $this->_hasSessionId = $value;
}

            
setId() 公共方法

设置会话 ID。

这是 PHP session_id() 的包装器。

public void setId ( $value )
$value 字符串

当前会话的会话 ID

                public function setId($value)
{
    session_id($value);
}

            
setName() 公共方法

设置当前会话的名称。

这是 PHP session_name() 的包装器。

public void setName ( $value )
$value 字符串

当前会话的会话名称,必须是字母数字字符串。它默认为“PHPSESSID”。

                public function setName($value)
{
    $this->freeze();
    session_name($value);
    $this->unfreeze();
}

            
setSavePath() 公共方法

设置当前会话保存路径。

这是 PHP session_save_path() 的包装器。

public void setSavePath ( $value )
$value 字符串

当前的会话保存路径。它可以是目录名或 路径别名

抛出异常 yii\base\InvalidArgumentException

如果路径不是有效的目录

                public function setSavePath($value)
{
    $path = Yii::getAlias($value);
    if (is_dir($path)) {
        session_save_path($path);
    } else {
        throw new InvalidArgumentException("Session save path is not a valid directory: $value");
    }
}

            
setTimeout() 公共方法

public void setTimeout ( $value )
$value 整数

数据被视为“垃圾”并清理的时间(秒)。

                public function setTimeout($value)
{
    $this->freeze();
    ini_set('session.gc_maxlifetime', $value);
    $this->unfreeze();
}

            
setUseCookies() 公共方法

设置一个值,指示是否应使用 cookie 来存储会话 ID。

三种状态是可能的

  • true: 仅使用 cookie 来存储会话 ID。
  • false: 不使用 cookie 来存储会话 ID。
  • null: 如果可能,将使用 cookie 来存储会话 ID;否则将使用其他机制(例如 GET 参数)。
public void setUseCookies ( $value )
$value 布尔值|

指示是否应使用 Cookie 来存储会话 ID 的值。

                public function setUseCookies($value)
{
    $this->freeze();
    if ($value === false) {
        ini_set('session.use_cookies', '0');
        ini_set('session.use_only_cookies', '0');
    } elseif ($value === true) {
        ini_set('session.use_cookies', '1');
        ini_set('session.use_only_cookies', '1');
    } else {
        ini_set('session.use_cookies', '1');
        ini_set('session.use_only_cookies', '0');
    }
    $this->unfreeze();
}

            
setUseStrictMode() 公共方法 (自版本 2.0.38 起可用)
public void setUseStrictMode ( $value )
$value 布尔值

是否启用严格模式。当为 true 时,此设置会阻止会话组件使用未初始化的会话 ID。注意:在 PHP < 5.5.2 上启用 useStrictMode 仅在使用自定义存储类时受支持。警告!虽然在安全会话中启用严格模式是强制性的,但 'session.use-strict-mode' 的默认值为 0

                public function setUseStrictMode($value)
{
    if (PHP_VERSION_ID < 50502) {
        if ($this->getUseCustomStorage() || !$value) {
            self::$_useStrictModePolyfill = $value;
        } else {
            throw new InvalidConfigException('Enabling `useStrictMode` on PHP < 5.5.2 is only supported with custom storage classes.');
        }
    } else {
        $this->freeze();
        ini_set('session.use_strict_mode', $value ? '1' : '0');
        $this->unfreeze();
    }
}

            
setUseTransparentSessionID() 公共方法

public void setUseTransparentSessionID ( $value )
$value 布尔值

是否启用透明 sid 支持。

                public function setUseTransparentSessionID($value)
{
    $this->freeze();
    ini_set('session.use_trans_sid', $value ? '1' : '0');
    $this->unfreeze();
}

            
trigger() 公共方法

定义于: yii\base\Component::trigger()

触发事件。

此方法表示事件的发生。它调用所有附加到事件的处理程序,包括类级别的处理程序。

public void trigger ( $name, yii\base\Event $event null )
$name 字符串

事件名称

$event yii\base\Event|null

事件实例。如果未设置,将创建一个默认的 yii\base\Event 对象。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
unfreeze() 受保护方法 (自版本 2.0.14 起可用)

启动会话并将数据从临时变量恢复

protected void unfreeze ( )

                protected function unfreeze()
{
    if (null !== $this->_frozenSessionData) {
        YII_DEBUG ? session_start() : @session_start();
        if ($this->getIsActive()) {
            Yii::info('Session unfrozen', __METHOD__);
        } else {
            $error = error_get_last();
            $message = isset($error['message']) ? $error['message'] : 'Failed to unfreeze session.';
            Yii::error($message, __METHOD__);
        }
        $_SESSION = $this->_frozenSessionData;
        $this->_frozenSessionData = null;
    }
}

            
updateFlashCounters() 受保护方法

更新闪存消息的计数器并删除过时的闪存消息。

此方法应该只在 init() 中调用一次。

protected void updateFlashCounters ( )

                protected function updateFlashCounters()
{
    $counters = $this->get($this->flashParam, []);
    if (is_array($counters)) {
        foreach ($counters as $key => $count) {
            if ($count > 0) {
                unset($counters[$key], $_SESSION[$key]);
            } elseif ($count == 0) {
                $counters[$key]++;
            }
        }
        $_SESSION[$this->flashParam] = $counters;
    } else {
        // fix the unexpected problem that flashParam doesn't return an array
        unset($_SESSION[$this->flashParam]);
    }
}