会话管理服务¶
注册服务¶
配置内容
'services' => array( 'XSession' => array( 'enable' => true, 'class' => 'X\\Service\\XSession\\Service', 'delay' => false, 'params' => array( 'autoStart' => true, 'name' => 'My-Custom-Session-Name', 'holders' => array('cookie', 'get', 'post', 'request'), 'cookie' => array( 'lifetime'=>3600, 'path'=>'/', 'domain'=>'', 'secure'=> false, 'httponly'=>false ), 'storage' => null, ), ), ),
autoStart
是否自动启动,默认为true
,自动启动时将在服务启动的时候自动启动会话, 不用手动调用seesion_start()
或者$service->startSession()
来启动。name
会话参数名称,说明会话在初始化时从哪个参数获取会话id。如果你需要获取上传文件的进度信息, 你需要将该名称同步到php.ini或者apache或者其他web服务器的配置文件中,否则无法获取到文件上传信息(@see http://php.net/manual/en/session.upload-progress.php#119631)。holders
这个指明会话ID从哪里获取去,如果没有设置将采用PHP.ini中的设置, 在配置中的变量中, 第一个找到的会话ID将会被使用。cookie
配置cookie信息。storage
配置会话存储方式,如果为null, 将使用默认的存储方式。 目前支持以下的存储方式 :mongodb 使用 mongodb 存储, 配置如下
# mongodb 'storage' => array( 'type' => 'mongodb', # 数据库链接 'uri' => 'mongodb://127.0.0.1:27017', #'uri' => 'mongodb://username:password@host:port' # 数据库名称 'database' => 'diabolo', # collection 名称 'collection' => 'sessions', # 有效时间秒数 'lifetime' => 3600, ),
radis 使用 redis 存储, 配置如下
# redis 'storage' => array( 'type' => 'redis', # 服务器地址 'host' => '127.0.0.1', # 端口号 'port' => 6379, # 数据库索引号 'database' => 1, # 链接密码 'password' => 'redis-password', # 有效期 'lifetime' => 3600, # 键名前缀 'prefix' => 'SESSION:', ),
memcached 使用memcached 存储, 配置如下
# memcached 'storage' => array( 'type' => 'memcached', # memcached地址 'host' => '127.0.0.1', # 端口 'port' => 11211, # 键名前缀 'prefix' => 'SESSION:', # 过期时间秒数 'lifetime' => 3600, ),
database 使用数据库存储, 配置如下
'storage' => array( 'type' => 'database', # 数据库链接 'dsn' => 'mysql:host=database.host;port=3306;dbname=databasename', # 会话存储使用的表名 'table' => 'sessions', # 数据库用户名 'user' => 'username', # 数据库密码 'password' => 'password', # 在写入表时,处理额外的存储字段 'serializeHandler' => array(SessionSerializeHandler::class, 'serialize'), # 会话有效期的秒数 'lifetime' => 3600 ),
数据库表结构
CREATE TABLE `sessions` ( `ID` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , -- 必须字段, 用于存储会话id `EXPIRED_AT` datetime NOT NULL , -- 必须字段,用于存储会话过期时间 `RAW` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , -- 必须字段, 用于存储会话内容 `USER_ID` int(11) NULL DEFAULT NULL , -- 自定义字段, 由 serializeHandler 处理后的数据信息 PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC;
serializeHandler
用于在存储会话的时候为额外的字段赋值class SessionSerializeHandler { public static function serialize( ) { return array( 'USER_ID' => 100, ); } }
会话管理¶
startSession()
启动会话close($save=ture)
关闭当前会话,默认保存变更的会话信息destory()
销毁当前会话clean($lifetime=0)
清理过期的会话数据
Flash 使用¶
flash 在存储方式上和普通会话变量没有区别,但是,在获取指定flash之后, 该flash将会被自动删除。
$service = Service::getService();
$service->flashAdd('demo-flash', "This is a demo flash");
$service->flashHas('demo-flash'); # true
$content = $service->flashGet('demo-flash');
echo $content; # "This is a demo flash"
$service->flashHas('demo-flash'); # false