DatabaseHandler
in package
implements
SessionHandlerInterface
Table of Contents
Interfaces
- SessionHandlerInterface
Constants
- LOCK_TIMEOUT = 50
- アドバイザリロックのタイムアウト秒数。 MySQL の innodb_lock_wait_timeout の既定値に合わせている。
Properties
- $lockName : string|null
- 現在取得しているアドバイザリロック名(未取得時は null)。
Methods
- close() : bool
- destroy() : bool
- gc() : mixed
- generateLockName() : string
- アドバイザリロック(MySQL GET_LOCK)のロック名を生成する。
- open() : bool
- read() : mixed
- write() : bool
- acquireLock() : void
- このセッションIDに対するアドバイザリロックを取得する。
- getLockNamespace() : string
- ロック名の名前空間(インストール識別子)を取得する。
- isValidSessionId() : bool
- セッションIDとして安全かどうかを検証する
- releaseLock() : void
- 取得中のアドバイザリロックを解放する。
Constants
LOCK_TIMEOUT
アドバイザリロックのタイムアウト秒数。 MySQL の innodb_lock_wait_timeout の既定値に合わせている。
private
mixed
LOCK_TIMEOUT
= 50
Properties
$lockName
現在取得しているアドバイザリロック名(未取得時は null)。
private
string|null
$lockName
= null
Methods
close()
public
close() : bool
Tags
Return values
booldestroy()
public
destroy(mixed $id) : bool
Parameters
- $id : mixed
Tags
Return values
boolgc()
public
gc(mixed $maxlifetime) : mixed
Parameters
- $maxlifetime : mixed
Tags
Attributes
- #[ReturnTypeWillChange]
generateLockName()
アドバイザリロック(MySQL GET_LOCK)のロック名を生成する。
public
static generateLockName(string $sessionId, string $namespace) : string
GET_LOCK はMySQLサーバ全体で共有され、ロック名は最大64文字という制約がある。 そのため次の性質を満たすよう、名前空間とセッションIDを連結してハッシュ化する。
- 64文字以内('acms_sess_' 10文字 + sha1 40文字 = 50文字)
- 安全な文字種のみ([a-z0-9_])
- 同一MySQLサーバを複数インストールで共有しても衝突しない(名前空間で分離)
Parameters
- $sessionId : string
-
セッションID
- $namespace : string
-
インストールを識別する名前空間(DB名・テーブルプレフィックス等)
Return values
stringopen()
public
open(mixed $savePath, mixed $sessionName) : bool
Parameters
- $savePath : mixed
- $sessionName : mixed
Tags
Return values
boolread()
public
read(mixed $id) : mixed
Parameters
- $id : mixed
Tags
Attributes
- #[ReturnTypeWillChange]
write()
public
write(mixed $id, mixed $data) : bool
Parameters
- $id : mixed
- $data : mixed
Tags
Return values
boolacquireLock()
このセッションIDに対するアドバイザリロックを取得する。
private
acquireLock(string $sessionId) : void
ロックを取得できなくてもサイトは停止させない(フェイルオープン)。
Parameters
- $sessionId : string
getLockNamespace()
ロック名の名前空間(インストール識別子)を取得する。
private
getLockNamespace() : string
Return values
stringisValidSessionId()
セッションIDとして安全かどうかを検証する
private
isValidSessionId(string $id) : bool
Parameters
- $id : string
Return values
boolreleaseLock()
取得中のアドバイザリロックを解放する。
private
releaseLock() : void