0 关注者

类 yii\web\DbSession

继承关系yii\web\DbSession » yii\web\MultiFieldSession » 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/DbSession.php

DbSession 通过使用数据库作为会话数据存储来扩展 yii\web\Session

默认情况下,DbSession 将会话数据存储在名为“session”的数据库表中。此表必须预先创建。可以通过设置 $sessionTable 来更改表名。

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

'session' => [
    'class' => 'yii\web\DbSession',
    // 'db' => 'mydb',
    // 'sessionTable' => 'my_session',
]

DbSession 扩展了 yii\web\MultiFieldSession,因此它允许将额外字段保存到 $sessionTable 中。有关更多详细信息,请参阅 yii\web\MultiFieldSession

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$_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
$cacheLimiter string 当前缓存限制器。 yii\web\Session
$cookieParams array 会话 Cookie 参数。 yii\web\Session
$count integer 会话变量的数量。 yii\web\Session
$db yii\db\Connection|array|string 数据库连接对象或数据库连接的应用程序组件 ID。 yii\web\DbSession
$fields array 要写入会话表列的会话字段 yii\web\DbSession
$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
$readCallback callable 在读取会话数据期间将调用的回调。 yii\web\MultiFieldSession
$savePath string 当前会话保存路径,默认为“/tmp”。 yii\web\Session
$sessionTable string 存储会话数据的数据库表的名称。 yii\web\DbSession
$timeout integer 数据被视为“垃圾”并被清除之前的秒数。 yii\web\Session
$useCookies boolean|null 指示是否应使用 Cookie 存储会话 ID 的值。 yii\web\Session
$useCustomStorage boolean 是否使用自定义存储。 yii\web\MultiFieldSession
$useStrictMode boolean 是否启用了严格模式。 yii\web\Session
$useTransparentSessionID boolean 是否启用了透明 sid 支持,默认为 false。 yii\web\Session
$writeCallback callable 在写入会话数据期间将调用的回调。 yii\web\MultiFieldSession

受保护属性

隐藏继承的属性

属性 类型 描述 定义于

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法在通过克隆现有对象创建对象后被调用。 yii\base\Component
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\base\Component
__isset() 检查属性是否已设置,即定义且不为 null。 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\DbSession
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\MultiFieldSession
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() 初始化 DbSession 组件。 yii\web\DbSession
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\DbSession
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

受保护方法

隐藏继承的方法

方法 描述 定义于
composeFields() 为会话写入组合存储字段集。 yii\web\MultiFieldSession
extractData() 从存储字段集中提取会话数据。 yii\web\MultiFieldSession
freeze() 如果会话已启动,则无法编辑会话 ini 设置。在 PHP7.2+ 中,它会抛出异常。 yii\web\Session
getReadQuery() 生成一个查询,从数据库获取会话。 yii\web\DbSession
registerSessionHandler() 注册会话处理程序。 yii\web\Session
typecastFields() 在将字段传递给 PDO 之前,此方法对 $fields 进行类型转换。 yii\web\DbSession
unfreeze() 启动会话并从临时变量恢复数据 yii\web\Session
updateFlashCounters() 更新闪存消息的计数器并移除过时的闪存消息。 yii\web\Session

属性详情

隐藏继承的属性

$db 公共属性

数据库连接对象或数据库连接的应用程序组件 ID。创建 DbSession 对象后,如果要更改此属性,则应仅将其分配给数据库连接对象。从 2.0.2 版本开始,这也可以是用于创建对象的配置数组。

$fields 受保护属性 (自 2.0.17 版本起可用)

要写入会话表列的会话字段

protected array $fields = []
$sessionTable 公共属性

存储会话数据的数据库表名称。表应预先创建如下

CREATE TABLE session
(
    id CHAR(40) NOT NULL PRIMARY KEY,
    expire INTEGER,
    data BLOB
)

其中“BLOB”指的是您首选 DBMS 的 BLOB 类型。以下是某些流行 DBMS 可以使用的 BLOB 类型

  • MySQL:LONGBLOB
  • PostgreSQL:BYTEA
  • MSSQL:BLOB

在生产服务器上使用 DbSession 时,我们建议您为会话表中的“expire”列创建一个数据库索引以提高性能。

请注意,根据 php.ini 中 session.hash_function 的设置,您可能需要调整 id 列的长度。例如,如果 session.hash_function=sha256,则应使用长度 64 而不是 40。

public string $sessionTable '{{%session}}'

方法详情

隐藏继承的方法

__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 结果
  • 行为的属性:返回行为属性值

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

另请参阅 __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()

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

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

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

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

另请参阅 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”的行为。
  • 行为的属性:设置行为属性值。

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

另请参阅 __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 [];
}

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

此类的完全限定名称。

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

            
close() 公共方法 (自版本 2.0.17 起可用)

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

public void close ( )

                public function close()
{
    if ($this->getIsActive()) {
        // prepare writeCallback fields before session closes
        $this->fields = $this->composeFields();
        YII_DEBUG ? session_write_close() : @session_write_close();
    }
}

            
composeFields() 受保护的方法

定义于: yii\web\MultiFieldSession::composeFields()

为会话写入组合存储字段集。

protected array composeFields ( $id null, $data null )
$id string|null

可选的会话 ID

$data string|null

可选的会话数据

返回值 array

存储字段

                protected function composeFields($id = null, $data = null)
{
    $fields = $this->writeCallback ? call_user_func($this->writeCallback, $this) : [];
    if ($id !== null) {
        $fields['id'] = $id;
    }
    if ($data !== null) {
        $fields['data'] = $data;
    }
    return $fields;
}

            
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);
        }
    }
}

            
extractData() 受保护的方法

定义于: yii\web\MultiFieldSession::extractData()

从存储字段集中提取会话数据。

protected string extractData ( $fields )
$fields array

存储字段。

返回值 string

会话数据。

                protected function extractData($fields)
{
    if ($this->readCallback !== null) {
        if (!isset($fields['data'])) {
            $fields['data'] = '';
        }
        $extraData = call_user_func($this->readCallback, $fields);
        if (!empty($extraData)) {
            session_decode($fields['data']);
            $_SESSION = array_merge((array) $_SESSION, (array) $extraData);
            return session_encode();
        }
        return $fields['data'];
    }
    return isset($fields['data']) ? $fields['data'] : '';
}

            
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 警报 类(例如 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();
}

            
getReadQuery() 受保护的方法

生成一个查询,从数据库获取会话。

protected yii\db\Query getReadQuery ( $id )
$id string

会话的 ID

                protected function getReadQuery($id)
{
    return (new Query())
        ->from($this->sessionTable)
        ->where('[[expire]]>:expire AND [[id]]=:id', [':expire' => time(), ':id' => $id]);
}

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

定义于: yii\web\MultiFieldSession::getUseCustomStorage()

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

此方法覆盖了父类实现,并始终返回 true。

public 布尔型 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() 公共方法

初始化 DbSession 组件。

此方法将初始化 $db 属性以确保它引用有效的 DB 连接。

public void init ( )
抛出 yii\base\InvalidConfigException

如果 $db 无效。

                public function init()
{
    parent::init();
    $this->db = Instance::ensure($this->db, Connection::className());
}

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

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

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

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

public void regenerateID ( $deleteOldSession false )
$deleteOldSession boolean

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

                public function regenerateID($deleteOldSession = false)
{
    $oldID = session_id();
    // if no session is started, there is nothing to regenerate
    if (empty($oldID)) {
        return;
    }
    parent::regenerateID(false);
    $newID = session_id();
    // if session id regeneration failed, no need to create/update it.
    if (empty($newID)) {
        Yii::warning('Failed to generate new session ID', __METHOD__);
        return;
    }
    $row = $this->db->useMaster(function () use ($oldID) {
        return (new Query())->from($this->sessionTable)
           ->where(['id' => $oldID])
           ->createCommand($this->db)
           ->queryOne();
    });
    if ($row !== false && $this->getIsActive()) {
        if ($deleteOldSession) {
            $this->db->createCommand()
                ->update($this->sessionTable, ['id' => $newID], ['id' => $oldID])
                ->execute();
        } else {
            $row['id'] = $newID;
            $this->db->createCommand()
                ->insert($this->sessionTable, $row)
                ->execute();
        }
    }
}

            
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 来存储会话 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);
}

            
typecastFields() 受保护的方法 (自版本 2.0.13 起可用)

在将字段传递给 PDO 之前,此方法对 $fields 进行类型转换。

默认实现将字段data转换为\PDO::PARAM_LOB。如果您需要特殊类型转换,可以覆盖此方法。

protected array typecastFields ( $fields )
$fields array

将传递给 PDO 的字段。键 - 名称,值 - 值

                protected function typecastFields($fields)
{
    if (isset($fields['data']) && !is_array($fields['data']) && !is_object($fields['data'])) {
        $fields['data'] = new PdoValue($fields['data'], \PDO::PARAM_LOB);
    }
    return $fields;
}

            
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]);
    }
}