1 Star 0 Fork 0

零壹工作室 / tp6start

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
01.10SESSION.md 3.96 KB
一键复制 编辑 原始数据 按行查看 历史
守信哥 提交于 2020-02-02 14:18 . 文件内容添加格式

Session

6.0版本的Session机制完全重写了,并且不再使用PHP内置的Session机制,全新实现一套Session机制,可以更好的支持Swoole/Workerman等环境。

所以不再支持PHP内置的session_*** 系列函数,也不再支持使用$_SESSION读取session数据,你必须通过框架提供的Session类或者门面来操作,Request类也封装了Session数据的读取。

开启Session

Session默认安装是关闭的,因为API接口应用通常并不需要使用Session,如果你的应用使用了Session,必须在app\middleware.php文件中开启SessionInit全局中间件。

return [
	\think\middleware\SessionInit::class,
	...
];

当然,如果你是多应用模式,并且只有index应用使用了Session的话,可以只需要在app\index\middleware.php中开启SessionInit全局中间件。

SessionInit中间件会获取当前用户的sessionId,并存入Cookie。而Session数据的写入则是在HTTP请求结束的时候统一写入,而非实时写入。所以不要在Session写入后进行任何的中断执行操作,可能会导入Session写入失败。

Session配置文件为session.php,用于定义session类型及相关参数。

基本操作

基本的Session操作如下(这里使用了门面方式)

// 设置session
Session::set('name', 'value');
// 判断session
Session::has('name');
// 获取Session
Session::get('name');
// 获取全部数据
Session::all();
// 获取并删除数据
Session::pull('name');
// 删除Session
Session::delete('name');
// 清空session
Session::clear();

Session数据会自动序列化保存。

Session有效期

Session有效期可以通过配置文件的expire参数来设置,默认为1440(秒),如果设置了过期时间的话,是精准可控的,例如你设置了

'expire'	=>	30,

表示30秒Session过期,你打开页面后,不做任何操作30秒之后再刷新,Session就会过期。

不要把有效期设置为0,否则Session会实时失效。

跨应用

如果你使用的是多应用模式,无论使用的是什么驱动,默认情况下,Session都是支持跨应用的。但如果你要保持每个应用独立,可以在应用的session.php配置文件中设置prefix参数确保独立。

'prefix'	=>	'admin'

Session序列化

session数据是序列化后保存的,默认采用serialize/unserialize方式保存,你可以自定义序列化保存的方式,例如:

'serialize'    =>    ['json_encode', 'json_decode'],

Session类型

默认使用文件方式写入Session,保存路径位于runtime/session目录下面(可以自定义路径),并支持GC机制。除了文件方式写入外,还可以支持直接使用缓存作为Session类型,例如:

return [
    'type'       => 'cache',
    'store'      => 'redis',
    'prefix'     => 'think',
];

表示使用redis缓存作为session类型。这样设计的优势是Session驱动和缓存驱动不需要重复定义,连配置都可以复用,因此除了文件方式之外,Session和缓存的驱动其实是公用的。

要以上的配置生效,请确保缓存配置文件cache.php中的stores中已经添加了redis缓存配置,例如:

return [
    'default'    =>    'file',
    'stores'    =>    [
        // 文件缓存
        'file'   =>  [
            // 驱动方式
            'type'   => 'file',
            // 设置不同的缓存保存目录
            'path'   => '../runtime/file/',
        ],  
        // redis缓存
        'redis'   =>  [
            // 驱动方式
            'type'   => 'redis',
            // 服务器地址
            'host'       => '127.0.0.1',
        ],  
    ],
];

其它注意事项

Session数据的保存不是实时的,是在当前Http请求结束的时候统一写入,所以如果你在Session设置后使用了die或者exit则会导致Session写入失败。

1
https://gitee.com/wgsuxin/tp6start.git
git@gitee.com:wgsuxin/tp6start.git
wgsuxin
tp6start
tp6start
master

搜索帮助