Session这个玩意还是挺重要的。
Laravel对于session的支持还是很完全的。
一:文件位置
Session 配置文件位于 config/session.php。
默认情况下,Laravel 使用的 Session 驱动为 file 驱动,这对许多应用而言是没有什么问题的。
在生产环境中,你可能考虑使用 memcached 或者 redis 驱动以便获取更佳的 Session 性能,尤其是线上同一个应用部署到多台机器的时候,这是最佳实践。
- 复制代码
Session 驱动用于定义请求的 Session 数据存放在哪里,Laravel 可以处理多种类型的驱动:
- bash
- 复制代码
file – Session 数据存储在 storage/framework/sessions 目录下;
- 复制代码
cookie – Session 数据存储在经过安全加密的 Cookie 中;
- 复制代码
database – Session 数据存储在数据库中
- 复制代码
memcached / redis – Session 数据存储在 Memcached/Redis 缓存中,访问速度最快;
- c
- 复制代码
array – Session 数据存储在简单 PHP 数组中,在多个请求之间是非持久化的。
二:获取数据
1:使用request获取
(1):正常获取
php
复制代码
$value = $request->session()->get('key', 'default');
(2):闭包获取
php
复制代码
$value = $request->session()->get('key', function() { return 'default'; });
2:全局函数session获取
php
复制代码
// 从session中获取数据... $value = session('key'); // 指定默认值... $value = session('key', 'default'); // 存储数据到session... session(['key' => 'value']);
3:获取session中所有数据
php
复制代码
$data = $request->session()->all();
4:判断 Session 中是否存在指定项
has 方法可用于检查数据项在 Session 中是否存在。如果存在并且不为 null 的话返回 true:
php
复制代码
if ($request->session()->has('users')) { // }
要判断某个值在 Session 中是否存在,即使是 null 的话也无所谓,则可以使用 exists 方法。如果值存在的话 exists 返回 true:
php
复制代码
if ($request->session()->exists('users')) { // }
三:存储数据
要在 Session 中存储数据,通常可以通过 put 方法或 session 辅助函数:
php
复制代码
//通过调用请求实例的 put 方法 $request->session()->put('key', 'value'); // 通过全局辅助函数 session session(['key' => 'value']);
1:推送数据到数组 Session
push 方法可用于推送数据到值为数组的 Session,例如,如果 user.teams 键包含团队名数组,可以像这样推送新值到该数组:
php
复制代码
$request->session()->push('user.teams', 'developers');
2:获取&删除数据
pull 方法将会通过一条语句从 Session 获取并删除数据:
php
复制代码
$value = $request->session()->pull('key', 'default');
四:一次性数据
有时候你可能想要在 Session 中存储只在下个请求中有效的数据,这可以通过 flash 方法来实现。使用该方法存储的 Session 数据只在随后的 HTTP 请求中有效,然后将会被删除:
php
复制代码
$request->session()->flash('status', '登录Laravel学院成功!');
如果你需要在更多请求中保持该一次性数据,可以使用 reflash 方法,该方法将所有一次性数据保留到下一个请求,如果你只是想要保存特定一次性数据,可以使用 keep 方法:
php
复制代码
$request->session()->reflash(); $request->session()->keep(['username', 'email']);
五:删除数据
forget 方法从 Session 中移除指定数据,如果你想要从 Session 中移除所有数据,可以使用 flush 方法:
php
复制代码
// 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 方法:
php
复制代码
$request->session()->regenerate();
最后,得着重声明一下,laravel框架的session是其自定义的session,和服务器的session是不一样的,也就说,你是用$_SESSION这个函数是获取不到laravel框架的session的。如果你想使用原生的SESSION,那么你需要在laravel框架的入口文件中加上如下代码:
ini
复制代码
# 开启PHP SESSION session_start();
有好的建议,请在下方输入你的评论。
欢迎访问个人博客 guanchao.site
欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”