Class 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 通过使用数据库作为会话(session)数据存储来扩展 yii\web\Session.

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

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

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

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

公共属性

隐藏继承的属性

属性类型描述定义在
$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
$db yii\db\Connection|array|string 数据库连接对象或数据库连接的应用程序组件 ID. yii\web\DbSession
$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
$sessionTable string 存储会话(session)数据的数据库表的名称. yii\web\DbSession
$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
$fields array 要加入会话(session)列表的会话(session)字段. yii\web\DbSession

公共方法

隐藏继承的方法

方法描述定义在
__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)数据. yii\web\DbSession
closeSession() Session 关闭处理程序. yii\web\Session
count() 返回 session 中的项目数量. yii\web\Session
destroy() 释放所有 session 变量, 并销毁注册到 session 的所有数据. yii\web\Session
destroySession() 会话(session)销毁处理程序. yii\web\DbSession
detachBehavior() 从组件中分离一个行为. yii\base\Component
detachBehaviors() 分离组件中的所有行为. yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件. yii\base\Component
gcSession() 会话(session)GC(垃圾收集)处理程序. yii\web\DbSession
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() 初始化 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() 开启 session. yii\web\Session
openSession() 打开会话处理程序. yii\web\DbSession
readSession() 会话(session)读取处理程序. yii\web\DbSession
regenerateID() 使用新生成的 session ID 更新当前 session ID. yii\web\DbSession
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\DbSession

受保护的方法

隐藏继承的方法

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

属性详情

$db public 属性

数据库连接对象或数据库连接的应用程序组件 ID.

在创建 DbSession 对象后, 如果要更改此属性, 则应仅为其分配数据库连接对象.

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

$fields protected 属性 (可用自版本: 2.0.17)

要加入会话(session)列表的会话(session)字段.

protected array $fields = []
$sessionTable public 属性

存储会话(session)数据的数据库表的名称. 该表应该如下创建:

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 时, 我们建议你为会话(session)表中的expire列创建一个数据库索引, 以提高性能.

Note: 根据 php.ini 的session.hash_function设置, 你可能需要调整id列的长度. 例如, 如果session.hash_function=sha256, 你应该使用长度64而不是40.

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

方法详情

close() public 方法 (可用自版本: 2.0.17)

结束当前会话并存储会话(session)数据.

public void close ( )
destroySession() public 方法

会话(session)销毁处理程序.

public boolean destroySession ( $id )
$id string

Session ID

return boolean

Whether session is destroyed successfully

gcSession() public 方法

会话(session)GC(垃圾收集)处理程序.

public boolean gcSession ( $maxLifetime )
$maxLifetime integer

数据被视为垃圾('garbage')并清理后的秒数.

return boolean

会话(session)是否已成功开启.

getReadQuery() protected 方法

生成查询以从数据库获取会话.

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

会话的ID.

init() public 方法

初始化 DbSession 组件.

该方法将初始化 $db 属性, 以确保它引用了有效的数据库连接.

public void init ( )
throws yii\base\InvalidConfigException

如果 $db 无效.

openSession() public 方法

打开会话处理程序.

public boolean openSession ( $savePath, $sessionName )
$savePath string

会话保存路径.

$sessionName string

会话名称.

return boolean

会话是否成功打开.

readSession() public 方法

会话(session)读取处理程序.

public string readSession ( $id )
$id string

会话(session)ID.

return string

会话(session)数据.

regenerateID() public 方法

使用新生成的 session ID 更新当前 session ID.

有关更多详细信息, 请参阅 http://php.net/session_regenerate_id.

如果 session 不是 active, 则此方法无效. 确保在调用 open() 之前先调用它.

public void regenerateID ( $deleteOldSession false )
$deleteOldSession boolean

是否删除旧的关联 session 文件.

typecastFields() protected 方法 (可用自版本: 2.0.13)

方法在将它们传递给 PDO 之前对 $fields 进行类型转换.

默认实现将字段data转换为\PDO::PARAM_LOB. 如果你需要特殊的类型转换, 你可以重写此方法.

protected array typecastFields ( $fields )
$fields array

字段, 将传递给 PDO. Key - name, Value - value.

writeSession() public 方法

会话(session)写入处理程序.

public boolean writeSession ( $id, $data )
$id string

会话(session)ID.

$data string

会话(session)数据.

return boolean

会话(session)是否成功写入.