Abstract Class yii\web\MultiFieldSession

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

MultiFieldSession 是具有多字段数据存储支持的会话(session)存储实现的基类.

使用多字段数据存储, 可以在存储记录中的多个字段之间拆分会话(session)数据. 使用这样的存储可以将特定的会话(session)数据保存到单独的字段中, 然后可以用普通 PHP 不允许的方式来操作会话(session).

例如, 可以将已验证的用户的 ID 保存为 MySQL 'session'表中的单独列, 该表允许查询特定用户查询所有活动会话(session)或随意终止它们.

通过 $writeCallback 进行会话(session)写入的自定义, 通过 $readCallback 进行读取.

在扩展此类时, 应该用 composeFields() 方法 - 将会话(session)数据写入存储中, 并使用 extractData() - 从存储中读取会话(session)数据.

公共属性

隐藏继承的属性

属性类型描述定义在
$allFlashes array Flash 消息 (key => message or key => [message1, message2]). 该属性是只读的. yii\web\Session
$behaviors yii\base\Behavior[] 附加到此组件的行为列表. 该属性是只读的. yii\base\Component
$cacheLimiter string 当前缓存限制器. 该属性是只读的. yii\web\Session
$cookieParams array session cookie 参数. 该属性是只读的. yii\web\Session
$count integer session 变量的数量. 该属性是只读的. yii\web\Session
$flash string 标识 flash 消息的键. 请注意, Flash 消息和常规 session 变量共享相同的名称空间. 如果你的常规 session 变量使用相同的名称, 则此方法将覆盖其值. 该属性是只写的. yii\web\Session
$flashParam string 存储 flash 消息数据的 session 变量的名称. yii\web\Session
$gCProbability float 每次 session 初始化时启动 GC(垃圾收集)进程的概率(百分比). yii\web\Session
$handler SessionHandlerInterface|array 实现 SessionHandlerInterface 或配置数组的对象. yii\web\Session
$hasSessionId boolean 当前请求是否发送了 session ID. yii\web\Session
$id string 当前 session ID. yii\web\Session
$isActive boolean session 是否已开启. 该属性是只读的. yii\web\Session
$iterator yii\web\SessionIterator 遍历 session 变量的迭代器. 该属性是只读的. yii\web\Session
$name string 当前 session 名称. yii\web\Session
$readCallback callable 在会话(session)数据读取期间将调用的回调. yii\web\MultiFieldSession
$savePath string 当前 session 的保存路径, 默认为/tmp. yii\web\Session
$timeout integer 此秒数后, 数据将被视为垃圾(garbage)并清除. 默认值为1440秒(或在 php.ini 中设置的session.gc_maxlifetime的值). yii\web\Session
$useCookies boolean|null 指示是否应使用 cookies 来存储 session ID 的值. yii\web\Session
$useCustomStorage boolean 是否使用自定义存储. 该属性是只读的. yii\web\MultiFieldSession
$useStrictMode boolean 是否启用严格模式. 该属性是只读的. yii\web\Session
$useTransparentSessionID boolean 是否启用透明 sid 支持, 默认为false. yii\web\Session
$writeCallback callable 会话(session)数据写入期间将调用的回调. yii\web\MultiFieldSession

受保护的属性

隐藏继承的属性

属性类型描述定义在
$_forceRegenerateId string|null 在启用useStrictMode且需要重新生成会话ID的情况下保存会话ID. yii\web\Session
$_originalSessionModule string|null 保留原始会话模块(再注册自定义处理程序之前), 以便在拥有自定义处理程序的Session组件之后使用没有自定义处理程序的Session组件时可以将其还原. yii\web\Session

公共方法

隐藏继承的方法

方法描述定义在
__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() 添加一个 flash 消息. 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() 结束当前 session 并存储 session 数据. yii\web\Session
closeSession() Session 关闭处理程序. yii\web\Session
count() 返回 session 中的项目数量. yii\web\Session
destroy() 释放所有 session 变量, 并销毁注册到 session 的所有数据. yii\web\Session
destroySession() Session 销毁处理程序. yii\web\Session
detachBehavior() 从组件中分离一个行为. yii\base\Component
detachBehaviors() 分离组件中的所有行为. yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件. yii\base\Component
gcSession() Session GC(垃圾收集)处理程序. yii\web\Session
get() 返回带有 session 变量名称的 session 变量值. yii\web\Session
getAllFlashes() 返回所有的 flash 消息. yii\web\Session
getBehavior() 返回指定的行为对象. yii\base\Component
getBehaviors() 返回附加到此组件的所有行为. yii\base\Component
getCacheLimiter() 返回当前的缓存限制器. yii\web\Session
getCookieParams() 返回 session cookie 参数. yii\web\Session
getCount() 返回 session 中的项目数量. yii\web\Session
getFlash() 返回一个 flash 消息. yii\web\Session
getGCProbability() 获取在每次 session 初始化时启动 GC(垃圾收集)进程概率(百分比). yii\web\Session
getHasSessionId() 返回一个值, 指示当前请求是否发送了 session ID. yii\web\Session
getId() 获取当前 session 的 ID. yii\web\Session
getIsActive() 获取 session 是否已经开启. yii\web\Session
getIterator() 返回用于遍历 session 变量的迭代器. yii\web\Session
getName() 获取当前 session 的名称. yii\web\Session
getSavePath() 获取当前 session 保存路径. yii\web\Session
getTimeout() 获取数据将被视为垃圾(garbage)并清除的秒数. yii\web\Session
getUseCookies() 返回指示是否应使用 cookie 来存储 session ID 的值. yii\web\Session
getUseCustomStorage() 返回一个值, 指示是否使用自定义会话(session)存储. yii\web\MultiFieldSession
getUseStrictMode() yii\web\Session
getUseTransparentSessionID() 获取是否启用透明 sid 支持. yii\web\Session
has() 判断是否存在指定键的 session 变量. yii\web\Session
hasEventHandlers() 返回一个值, 指示是否有任何处理程序附加到指定的事件. yii\base\Component
hasFlash() 返回一个值, 指示是否存在与指定键相关联的 flash 消息. yii\web\Session
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\Component
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\Component
init() 初始化对象. yii\base\BaseObject
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() 开启 session. yii\web\Session
openSession() Session 开启处理程序. yii\web\Session
readSession() Session 读取处理程序. yii\web\Session
regenerateID() 使用新生成的 session ID 更新当前 session ID. yii\web\Session
remove() 删除会话 session 变量. yii\web\Session
removeAll() 删除所有 session 变量. yii\web\Session
removeAllFlashes() 删除所有的 flash 消息. yii\web\Session
removeFlash() 删除一个 flash 消息. yii\web\Session
set() 添加一个 session 变量. yii\web\Session
setCacheLimiter() 设置缓存限制器. yii\web\Session
setCookieParams() 设置 session cookie 参数. yii\web\Session
setFlash() 设置一个 flash 消息. yii\web\Session
setGCProbability() 设置在每次 session 初始化时启动 GC(垃圾收集)进程概率(百分比). yii\web\Session
setHasSessionId() 设置一个值, 指示当前请求是否已经发送了 session ID. yii\web\Session
setId() 设置当前 session 的 ID. yii\web\Session
setName() 设置当前 session 的名称. yii\web\Session
setSavePath() 设置当前 session 保存路径. yii\web\Session
setTimeout() 设置数据将被视为垃圾(garbage)并清除的秒数. yii\web\Session
setUseCookies() 设置一个值, 指示是否应使用 Cookie 来存储 session ID. yii\web\Session
setUseStrictMode() yii\web\Session
setUseTransparentSessionID() 设置是否启用透明 sid 支持. yii\web\Session
trigger() 触发事件. yii\base\Component
writeSession() Session 写入处理程序. yii\web\Session

受保护的方法

隐藏继承的方法

方法描述定义在
composeFields() 为会话(session)写入组成存储字段集. yii\web\MultiFieldSession
extractData() 从存储字段集中提取会话(session)数据. yii\web\MultiFieldSession
freeze() 如果 session 开启, 则无法编辑 session ini 设置. 在 php7.2+ 中, 它引发异常. yii\web\Session
registerSessionHandler() 注册 session 处理程序. yii\web\Session
unfreeze() 开启 session 并从临时变量恢复数据. yii\web\Session
updateFlashCounters() 更新 flash 消息的计数器, 并删除过时的 flash 消息. yii\web\Session

属性详情

$readCallback public 属性

在会话(session)数据读取期间将调用的回调.

回调的签名应如下所示:

function ($fields)

其中$fields是为读取会话(session)设置的存储字段, 而$session是这个会话(session)的实例. 如果回调函数返回一个数组, 它将被合并到会话(session)数据中.

例如:

function ($fields) {
    return [
        'expireDate' => Yii::$app->formatter->asDate($fields['expire']),
    ];
}
public callable $readCallback null
$useCustomStorage public 属性

是否使用自定义存储. 该属性是只读的.

public boolean $useCustomStorage null
$writeCallback public 属性

会话(session)数据写入期间将调用的回调.

回调的签名应如下所示:

function ($session)

其中$session是这个会话(session)的实例, 这个变量可以用来检索会话(session)数据. 回调应该返回实际的字段集, 应该将其保存到会话(session)存储中.

例如:

function ($session) {
    return [
        'user_id' => Yii::$app->user->id,
        'ip' => $_SERVER['REMOTE_ADDR'],
        'is_trusted' => $session->get('is_trusted', false),
    ];
}
public callable $writeCallback null

方法详情

composeFields() protected 方法

为会话(session)写入组成存储字段集.

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

可选的会话(session)ID.

$data string

可选的会话(session)数据.

return array

存储字段.

extractData() protected 方法

从存储字段集中提取会话(session)数据.

protected string extractData ( $fields )
$fields array

存储字段.

return string

会话(session)数据.

getUseCustomStorage() public 方法

返回一个值, 指示是否使用自定义会话(session)存储.

此方法覆盖父实现并始终返回true.

public boolean getUseCustomStorage ( )
return boolean

是否使用自定义存储.