13.0.会话

会话组件

配置

组件配置

//会话组件  
'session'=>
[
    'class'=>'\qing\session\Session'
    //session标识符/默认PHPSESSID
    'session_name'=>'sessionid',
    //会话cookie的httponly标识符
    'cookie_httponly'=>true,
],
//用户权限验证组件
'user'=>
[
    'class'=>'\qing\session\User'
],

配置属性

/**
 * session标识符/默认PHPSESSID
 * 
 * @var string
 */
public $session_name;
/**
 * 会话cookie的httponly标识符
 * 
 * @var boolean 默认开启
 */
public $cookie_httponly=true;
/**
 * 会话生命周期
 * 
 * - 会话文件回收周期,受gc启动概率影响,不精确
 * - 会话cookie过期时间,精确删除,但是通过伪造请求, 还是可以使用这个SessionID的值
 * - 
 * 
 * @var number
 */
public $lifetime;

接口

/**
 * 设置会话过期时间,单位秒/s;60*60*24=24h
 * 过期后session文件和cookie均被清除
 *
 * @param number $lifetime
 */
public function lifetime($lifetime=0)
/**
 * 重新生成会话ID
 * 
 * - 不修改会话数据,使用新的 ID,替换原有会话 ID
 * - 避免id被劫持
 * 
 * re generate 重新生成
 */
public function regenerate_id()
/**
 * 用文件保存session时的保存目录
 * 读取/设置当前会话的保存路径
 *
 * @see session.save_path string
 * @param string $path
 */
public function save_path($path='')
/**
 * 会话 cookie 的域名
 * - 默认为无,自动产生主机名。
 * - 如果要让 cookie在所有的子域中都可用,此参数必须以点(.)开头,例如:.qingmvc.com
 * 
 * @see session.cookie_domain string
 * @param string $domain
 */
public function cookie_domain($domain=null)

案例

use qing\facades\Session;

//开启会话
Session::start();

//提交会话
Session::commit();
$session=new Session();
$session->session_name='sessionid';

//#会话文件的保存路径,默认/tmp
$sesspath=main()->getRuntimePath();
$sesspath=$sesspath.DS.'~sess';
MK::dir($sesspath);
$session->save_path($sesspath);

//#会话生命周期/10s/0 表示'直到关闭浏览器'
$session->lifetime(10);
$session->cookie_path('/');
$session->cookie_domain('.qingmvc.com');

//#自定义会话管理处理器
//$handler=new \qing\session\handler\RedisHandler();
//$handler=new \qing\session\handler\DbHandler();
//$handler->lifetime=$lifetime;
//$session->save_handler($handler);