laravel5.8(九)session基本使用

简介: Session这个玩意还是挺重要的。Laravel对于session的支持还是很完全的。一:文件位置Session 配置文件位于 config/session.php。默认情况下,Laravel 使用的 Session 驱动为 file 驱动,这对许多应用而言是没有什么问题的。在生产环境中,你可能考虑使用 memcached 或者 redis 驱动以便获取更佳的 Session 性能,尤其是线上同一个应用部署到多台机器的时候,这是最佳实践。1. 复制代码 Session 驱动用于定义请求的 Session 数据存放在哪里,Laravel 可以处理多种类型的驱动:1. bash

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

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

一:文件位置

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

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

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

  1. 复制代码
Session 驱动用于定义请求的 Session 数据存放在哪里,Laravel 可以处理多种类型的驱动:
  1. bash
  2. 复制代码
file – Session 数据存储在 storage/framework/sessions 目录下;
  1. 复制代码
cookie – Session 数据存储在经过安全加密的 Cookie 中;
  1. 复制代码
database – Session 数据存储在数据库中
  1. 复制代码
memcached / redis – Session 数据存储在 Memcached/Redis 缓存中,访问速度最快;
  1. c
  2. 复制代码
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

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”

目录
相关文章
|
7月前
|
存储 Java 应用服务中间件
Session基本使用及原理和使用细节
Session基本使用及原理和使用细节
172 0
|
4月前
|
存储 缓存 中间件
Django 框架中 Session 的用法
【8月更文挑战第30天】
40 6
|
4月前
|
缓存 数据库 数据安全/隐私保护
Django入门到放弃之session
Django入门到放弃之session
|
Java 应用服务中间件 API
JavaWeb--快速入门Cookie&Session
JavaWeb--快速入门Cookie&Session
83 0
|
缓存 自然语言处理 搜索推荐
Yii2.0中如何安装xunsearch?具体步骤是怎样的?底层原理是什么?
Yii2.0中如何安装xunsearch?具体步骤是怎样的?底层原理是什么?
168 0
|
Java 应用服务中间件 API
JavaWeb--快速入门Cookie&Session(二)
JavaWeb--快速入门Cookie&Session(二)
107 0
JavaWeb--快速入门Cookie&Session(二)
|
Java
JavaWeb--快速入门Cookie&Session(一)
JavaWeb--快速入门Cookie&Session(一)
100 0
JavaWeb--快速入门Cookie&Session(一)
【laralve项目】@23 laravel-admin添加的源码分析
【laralve项目】@23 laravel-admin添加的源码分析
210 0
【laralve项目】@23 laravel-admin添加的源码分析
|
SQL 存储 前端开发
【NodeJS】归纳篇(三)Express | 链式操作 | cookie && session | 模板引擎 | Router | mysql
【NodeJS】归纳篇(三)Express | 链式操作 | cookie && session | 模板引擎 | Router | mysql
185 0

热门文章

最新文章