前言
thinkphp的session也不是php的内置session
也是改造过的
session开启
在中间件中开启
这里我在admin应用的中间件中开启
# app/admin/middleware.php
return [
\think\middleware\SessionInit::class
];
设置session属性
# $user 是登录的用户信息 将其写入session中
# 这里使用的session门面
# 可以替换成session辅助函数
# session('user', $user->toArray())
Session::set('user', $user->toArray());
判断session属性是否存在
# Session::has('user') 判断session 中user是否存在
# 使用 session 辅助函数可以这么写
session('?user');
if (!Session::has('user') && !in_array($request->url(), $this->except)) {
return redirect('/admin/login');
}
删除session属性
# 使用session门面删除user属性
# 使用session辅助函数 可以这么写 session('user',null);
Session::delete('user');
获取session属性
# 获取session中user属性
# 换成session辅助函数 可以写成 session('user')
dd(Session::get('user'));
# 获取session 所有属性
# 换成session辅助函数可以写成 session()
dd(Session::all());
session配置
config/session.php
return [
// session name
'name' => 'PHPSESSID',
// SESSION_ID的提交变量,解决flash上传跨域
'var_session_id' => '',
// 驱动方式 支持file cache
'type' => 'file',
// 存储连接标识 当type使用cache的时候有效
'store' => null,
// 过期时间
'expire' => 1440,
// 前缀
'prefix' => '',
];
将session存储至redis,解决分布式session问题
修改更改 config/session.php
'type'=> 'cache',
# config/cache.php 需要配置redis连接方式
'store'=> 'redis',
config/cache.php
增加redis配置
return [
// 默认缓存驱动
'default' => env('cache.driver', 'file'),
// 缓存连接方式配置
'stores' => [
'file' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => '',
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
// 缓存标签前缀
'tag_prefix' => 'tag:',
// 序列化机制 例如 ['serialize', 'unserialize']
'serialize' => [],
],
'redis' => [
// 驱动方式
'type' => 'redis',
// 服务器地址
'host' => '127.0.0.1',
// 服务端口
'port' => '6379',
// 服务密码
'password' => '',
],
],
];