Session这个玩意还是挺重要的。
Laravel对于session的支持还是很完全的。
一:文件位置
Session 配置文件位于 config/session.php。
默认情况下,Laravel 使用的 Session 驱动为 file 驱动,这对许多应用而言是没有什么问题的。
在生产环境中,你可能考虑使用 memcached 或者 redis 驱动以便获取更佳的 Session 性能,尤其是线上同一个应用部署到多台机器的时候,这是最佳实践。
Session 驱动用于定义请求的 Session 数据存放在哪里,Laravel 可以处理多种类型的驱动:
file – Session 数据存储在 storage/framework/sessions 目录下;
cookie – Session 数据存储在经过安全加密的 Cookie 中;
database – Session 数据存储在数据库中
memcached / redis – Session 数据存储在 Memcached/Redis 缓存中,访问速度最快;
array – Session 数据存储在简单 PHP 数组中,在多个请求之间是非持久化的。
二:获取数据
1:使用request获取
(1):正常获取
$value = $request->session()->get('key', 'default');
(2):闭包获取
$value = $request->session()->get('key', function() {
return 'default';
});
2:全局函数session获取
// 从session中获取数据...
$value = session('key');
// 指定默认值...
$value = session('key', 'default');
// 存储数据到session...
session(['key' => 'value']);
3:获取session中所有数据
$data = $request->session()->all();
4:判断 Session 中是否存在指定项
has 方法可用于检查数据项在 Session 中是否存在。如果存在并且不为 null 的话返回 true:
if ($request->session()->has('users')) {
//
}
要判断某个值在 Session 中是否存在,即使是 null 的话也无所谓,则可以使用 exists 方法。如果值存在的话 exists 返回 true:
if ($request->session()->exists('users')) {
//
}
三:存储数据
要在 Session 中存储数据,通常可以通过 put 方法或 session 辅助函数:
//通过调用请求实例的 put 方法
$request->session()->put('key', 'value');
// 通过全局辅助函数 session
session(['key' => 'value']);
1:推送数据到数组 Session
push 方法可用于推送数据到值为数组的 Session,例如,如果 user.teams 键包含团队名数组,可以像这样推送新值到该数组:
$request->session()->push('user.teams', 'developers');
2:获取&删除数据
pull 方法将会通过一条语句从 Session 获取并删除数据:
$value = $request->session()->pull('key', 'default');
四:一次性数据
有时候你可能想要在 Session 中存储只在下个请求中有效的数据,这可以通过 flash 方法来实现。使用该方法存储的 Session 数据只在随后的 HTTP 请求中有效,然后将会被删除:
$request->session()->flash('status', '登录Laravel学院成功!');
如果你需要在更多请求中保持该一次性数据,可以使用 reflash 方法,该方法将所有一次性数据保留到下一个请求,如果你只是想要保存特定一次性数据,可以使用 keep 方法:
$request->session()->reflash();
$request->session()->keep(['username', 'email']);
五:删除数据
forget 方法从 Session 中移除指定数据,如果你想要从 Session 中移除所有数据,可以使用 flush 方法:
// Forget a single key...
$request->session()->forget('key');
// Forget multiple keys...
$request->session()->forget(['key1', 'key2']);
$request->session()->flush();
六:重新生成 Session ID
重新生成 Session ID 经常用于阻止恶意用户对应用进行 session fixation 攻击
如果你使用内置的 LoginController 的话,Laravel 会在认证期间自动重新生成 session ID,如果你需要手动重新生成 session ID,可以使用 regenerate 方法:
$request->session()->regenerate();
原文链接:https://guanchao.site/index/article/articledetail.html?artid=ZoH2p2YFW
有好的建议,请在下方输入你的评论。
网友评论