淘先锋技术网

首页 1 2 3 4 5 6 7

Session这个玩意还是挺重要的。

Laravel对于session的支持还是很完全的。

一:文件位置

Session 配置文件位于 config/session.php。

默认情况下,Laravel 使用的 Session 驱动为 file 驱动,这对许多应用而言是没有什么问题的。

在生产环境中,你可能考虑使用 memcached 或者 redis 驱动以便获取更佳的 Session 性能,尤其是线上同一个应用部署到多台机器的时候,这是最佳实践。

  1.  Session 驱动用于定义请求的 Session 数据存放在哪里,Laravel 可以处理多种类型的驱动:
    
  2.  file – Session 数据存储在 storage/framework/sessions 目录下;
    
  3.  cookie – Session 数据存储在经过安全加密的 Cookie 中;
    
  4.  database – Session 数据存储在数据库中
    
  5.  memcached / redis – Session 数据存储在 Memcached/Redis 缓存中,访问速度最快;
    
  6.  array – Session 数据存储在简单 PHP 数组中,在多个请求之间是非持久化的。
    

二:获取数据

1:使用request获取

(1):正常获取

(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中所有数据

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 键包含团队名数组,可以像这样推送新值到该数组:

2:获取&删除数据

pull 方法将会通过一条语句从 Session 获取并删除数据:

四:一次性数据

有时候你可能想要在 Session 中存储只在下个请求中有效的数据,这可以通过 flash 方法来实现。使用该方法存储的 Session 数据只在随后的 HTTP 请求中有效,然后将会被删除:

如果你需要在更多请求中保持该一次性数据,可以使用 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 方法:

原文链接:https://guanchao.site/index/article/articledetail.html?artid=ZoH2p2YFW

有好的建议,请在下方输入你的评论。

欢迎访问小程序:
在这里插入图片描述