0 关注者

类 yii\web\CacheSession

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

CacheSession 使用缓存作为存储介质来实现会话组件。

使用的缓存可以是任何缓存应用程序组件。缓存应用程序组件的 ID 通过 $cache 指定,默认为 'cache'。

注意,根据定义,缓存存储是易失性的,这意味着存储在其中的数据可能会被交换出去并丢失。因此,您必须确保此组件使用的缓存不是易失性的。如果您想使用数据库作为存储介质,yii\web\DbSession 是更好的选择。

以下示例显示了如何配置应用程序以使用 CacheSession:将以下内容添加到应用程序配置中的 components

'session' => [
    'class' => 'yii\web\CacheSession',
    // 'cache' => 'mycache',
]

公有属性

隐藏继承属性

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

受保护的方法

隐藏继承方法

方法 描述 定义于
calculateKey() 生成用于在缓存中存储会话数据的唯一键。 yii\web\CacheSession
freeze() 如果会话已启动,则无法编辑会话 ini 设置。在 PHP7.2+ 中会抛出异常。 yii\web\Session
registerSessionHandler() 注册会话处理程序。 yii\web\Session
unfreeze() 启动会话并从临时变量恢复数据 yii\web\Session
updateFlashCounters() 更新闪存消息的计数器并移除过期的闪存消息。 yii\web\Session

属性详情

隐藏继承属性

$cache 公共属性

缓存对象或缓存对象的应用程序组件 ID。会话数据将使用此缓存对象存储。

创建 CacheSession 对象后,如果要更改此属性,则应仅将其分配给缓存对象。

从 2.0.2 版本开始,这也可以是用于创建对象的配置数组。

$useCustomStorage 公共属性

是否使用自定义存储。

public boolean $useCustomStorage null

方法详情

隐藏继承方法

__call() 公共方法

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

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

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

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

public mixed __call ( $name, $params )
$name string

方法名

$params array

方法参数

返回值 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 array

将用于初始化对象属性的名称-值对

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

            
__get() 公共方法

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

返回组件属性的值。

此方法将按以下顺序检查并相应地采取措施

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

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

另请参阅 __set()

public mixed __get ( $name )
$name string

属性名

返回值 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

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

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

public boolean __isset ( $name )
$name string

属性名或事件名

返回值 boolean

命名属性是否已设置

                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" 的行为
  • 行为的属性:设置行为属性值

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

另请参阅 __get()

public void __set ( $name, $value )
$name string

属性名或事件名

$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 string

属性名

抛出异常 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() 公共方法

定义于: yii\web\Session::addFlash()

添加闪存消息。

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

另请参阅

public void addFlash ( $key, $value true, $removeAfterAccess true )
$key string

标识闪存消息的键。

$value mixed

闪存消息

$removeAfterAccess boolean

闪存消息是否应该只在访问时自动删除。如果为 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 string

行为的名称。

$behavior 字符串|数组|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 array

要附加到组件的行为列表

                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 数组 behaviors ( )
返回值 array

行为配置。

                public function behaviors()
{
    return [];
}

            
calculateKey() 受保护方法

生成用于在缓存中存储会话数据的唯一键。

protected 混合 calculateKey ( $id )
$id string

会话变量名

返回值 mixed

与会话变量名关联的安全缓存键

                protected function calculateKey($id)
{
    return [__CLASS__, $id];
}

            
canGetProperty() 公共方法

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

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

如果满足以下条件,则可以读取属性:

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

另请参阅 canSetProperty()

public 布尔值 canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

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

返回值 boolean

属性是否可读

                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 布尔值 canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

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

返回值 boolean

属性是否可写

                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 字符串 className ( )
返回值 string

此类的完全限定名称。

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

            
close() 公共方法

定义于: yii\web\Session::close()

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

public void close ( )

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

            
count() 公共方法

定义于: yii\web\Session::count()

返回会话中项目的数量。

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

public integer count ( )
返回值 integer

会话中的项目数量。

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

            
destroy() 公共方法

定义于: yii\web\Session::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 string

行为的名称。

返回值 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 起可用)

定义于: yii\web\Session::freeze()

如果会话已启动,则无法编辑会话 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() 公共方法

定义于: yii\web\Session::get()

返回具有会话变量名称的会话变量值。

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

public mixed get ( $key, $defaultValue null )
$key string

会话变量名称

$defaultValue mixed

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

返回值 mixed

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

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

            
getAllFlashes() 公共方法

定义于: yii\web\Session::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 boolean

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

返回值 array

闪存消息(键 => 消息或键 => [消息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 string

行为名称

返回值 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 起可用)

定义于: yii\web\Session::getCacheLimiter()

返回当前缓存限制器

public string getCacheLimiter ( )
返回值 string

当前缓存限制器

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

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

会话 Cookie 参数。

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

            
getCount() 公共方法

定义于: yii\web\Session::getCount()

返回会话中项目的数量。

public integer getCount ( )
返回值 integer

会话变量的数量

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

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

标识闪存消息的键

$defaultValue mixed

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

$delete boolean

是否在此方法调用后立即删除此闪存消息。如果为 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 ( )
返回值 float

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

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

            
getHasSessionId() 公共方法

定义于: yii\web\Session::getHasSessionId()

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

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

public boolean getHasSessionId ( )
返回值 boolean

当前请求是否发送了会话 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() 公共方法

定义于: yii\web\Session::getId()

获取会话 ID。

这是对 PHP session_id() 的包装器。

public string getId ( )
返回值 string

当前的会话 ID

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

            
getIsActive() 公共方法
public boolean getIsActive ( )
返回值 boolean

会话是否已启动

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

            
getIterator() 公共方法

定义于: yii\web\Session::getIterator()

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

此方法是接口 IteratorAggregate 所需的。

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

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

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

            
getName() 公共方法

定义于: yii\web\Session::getName()

获取当前会话的名称。

这是对 PHP session_name() 的包装器。

public string getName ( )
返回值 string

当前的会话名称

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

            
getSavePath() 公共方法

定义于: yii\web\Session::getSavePath()

获取当前会话保存路径。

这是对 PHP session_save_path() 的包装器。

public string getSavePath ( )
返回值 string

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

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

            
getTimeout() 公共方法
public integer getTimeout ( )
返回值 integer

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

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

            
getUseCookies() 公共方法

定义于: yii\web\Session::getUseCookies()

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

另请参阅 setUseCookies()

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

指示是否应使用 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。

public boolean getUseCustomStorage ( )
返回值 boolean

是否使用自定义存储。

                public function getUseCustomStorage()
{
    return true;
}

            
getUseStrictMode() 公共方法 (自版本 2.0.38 起可用)
public 布尔型 getUseStrictMode ( )
返回值 boolean

是否启用了严格模式。

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

            
getUseTransparentSessionID() 公共方法
public 布尔型 getUseTransparentSessionID ( )
返回值 boolean

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

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

            
has() 公共方法

定义于: yii\web\Session::has()

public 布尔型 has ( $key )
$key mixed

会话变量名

返回值 boolean

是否存在名为 session 的变量

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

            
hasEventHandlers() 公共方法

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

返回一个值,指示是否有任何处理程序附加到命名事件。

public 布尔型 hasEventHandlers ( $name )
$name string

事件名称

返回值 boolean

是否存在任何附加到事件的处理程序。

                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() 公共方法

定义于: yii\web\Session::hasFlash()

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

public 布尔型 hasFlash ( $key )
$key string

识别闪存消息类型的键

返回值 boolean

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

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

            
hasMethod() 公共方法

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

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

如果方法被定义,则

  • 类具有指定名称的方法
  • 附加的行为具有给定名称的方法(当 $checkBehaviors 为 true 时)。
public 布尔型 hasMethod ( $name, $checkBehaviors true )
$name string

属性名

$checkBehaviors boolean

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

返回值 boolean

方法是否已定义

                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 布尔型 hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

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

返回值 boolean

属性是否已定义

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

            
init() 公共方法

初始化应用程序组件。

public void init ( )

                public function init()
{
    parent::init();
    $this->cache = Instance::ensure($this->cache, 'yii\caching\CacheInterface');
}

            
off() 公共方法

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

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

此方法与 on() 相反。

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

另请参阅 on()

public 布尔型 off ( $name, $handler null )
$name string

事件名称

$handler 可调用|

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

返回值 boolean

如果找到并分离了处理程序

                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() 公共方法

定义于: yii\web\Session::offsetExists()

此方法是接口 ArrayAccess 所需的。

public 布尔型 offsetExists ( $offset )
$offset 整数|字符串

要检查的偏移量

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

            
offsetGet() 公共方法

定义于: yii\web\Session::offsetGet()

此方法是接口 ArrayAccess 所需的。

public 混合型 offsetGet ( $offset )
$offset 整数|字符串

要检索元素的偏移量。

返回值 mixed

偏移量处的元素,如果在偏移量处未找到元素,则为 null

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

            
offsetSet() 公共方法

定义于: yii\web\Session::offsetSet()

此方法是接口 ArrayAccess 所需的。

public void offsetSet ( $offset, $item )
$offset 整数|字符串

要设置元素的偏移量

$item mixed

元素值

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

            
offsetUnset() 公共方法

定义于: yii\web\Session::offsetUnset()

此方法是接口 ArrayAccess 所需的。

public void offsetUnset ( $offset )
$offset 整数|字符串

要取消设置元素的偏移量

                #[\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 string

事件名称

$handler callable

事件处理器

$data mixed

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

$append boolean

是否将新的事件处理器附加到现有处理器列表的末尾。如果为 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() 公共方法

定义于: yii\web\Session::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() 公共方法

定义于: yii\web\Session::regenerateID()

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

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

当会话未 激活 时,此方法无效。请确保在调用它之前调用 open()

另请参阅

public void regenerateID ( $deleteOldSession false )
$deleteOldSession boolean

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

                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() 受保护方法

定义于: yii\web\Session::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() 公共方法

定义于: yii\web\Session::remove()

移除会话变量。

public mixed remove ( $key )
$key string

要删除的会话变量的名称

返回值 mixed

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

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

            
removeAll() 公共方法

定义于: yii\web\Session::removeAll()

移除所有会话变量。

public void removeAll ( )

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

            
removeAllFlashes() 公共方法

定义于: yii\web\Session::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 string

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

返回值 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() 公共方法

定义于: yii\web\Session::set()

添加会话变量。

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

public void set ( $key, $value )
$key string

会话变量名

$value mixed

会话变量值

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

            
setCacheLimiter() 公共方法 (自 2.0.14 版本起可用)

定义于: yii\web\Session::setCacheLimiter()

设置缓存限制器

public void setCacheLimiter ( $cacheLimiter )
$cacheLimiter string

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

            
setCookieParams() 公共方法

定义于: yii\web\Session::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 array

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() 公共方法

定义于: yii\web\Session::setFlash()

设置闪存消息。

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

另请参阅

public void setFlash ( $key, $value true, $removeAfterAccess true )
$key string

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

$value mixed

闪存消息

$removeAfterAccess boolean

闪存消息是否应该只在访问时自动删除。如果为 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 float

每次会话初始化时启动 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() 公共方法

定义于: yii\web\Session::setHasSessionId()

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

提供此方法是为了能够覆盖确定会话 ID 是否发送的默认方式。

public void setHasSessionId ( $value )
$value boolean

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

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

            
setId() 公共方法

定义于: yii\web\Session::setId()

设置会话 ID。

这是对 PHP session_id() 的包装器。

public void setId ( $value )
$value string

当前会话的会话 ID

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

            
setName() 公共方法

定义于: yii\web\Session::setName()

设置当前会话的名称。

这是对 PHP session_name() 的包装器。

public void setName ( $value )
$value string

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

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

            
setSavePath() 公共方法

定义于: yii\web\Session::setSavePath()

设置当前会话保存路径。

这是对 PHP session_save_path() 的包装器。

public void setSavePath ( $value )
$value string

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

抛出异常 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 integer

数据被视为“垃圾”并清除之前的秒数

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

            
setUseCookies() 公共方法

定义于: yii\web\Session::setUseCookies()

设置指示是否应使用 cookie 存储会话 ID 的值。

三种状态是可能的

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

指示是否应使用 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 boolean

是否启用严格模式。当 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 boolean

是否启用透明 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 string

事件名称

$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 起可用)

定义于: yii\web\Session::unfreeze()

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

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() 受保护的方法

定义于: yii\web\Session::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]);
    }
}