laravel基础--8.2 session、cookie

session

 

获取数据

public function showProfile(Request $request, $id) { 
    $value = $request->session()->get('key'); 
    // 
}

存储数据

获取到session实例后,就可以调用多个方法来与底层数据进行交互,例如,put方法存储新的数据到session中:

//通过put方法
 $request->session()->put('key', 'value'); 
//通过全局辅助函数 
session(['key' => 'value']);

删除数据

forget方法从session中移除指定数据,如果你想要从session中移除所有数据,可以使用flush方法:

$request->session()->forget('key'); 
$request->session()->flush();

上一次请求输入

Laravel 允许你在两次请求之间保存上一次输入数据,这个特性在检测校验数据失败后需要重新填充表单数据时很有用,不过如果你使用的是 Laravel 自带的验功能,则不需要手动使用这些方法,因为一些 Laravel 自带的校验设置会自动调用它们。

将输入存储到Session

Illuminate\Http\Request 实例的 flash 方法会将当前输入存放到一次性 Session(所谓的一次性指的是从 Session 中取出数据后,对应数据会从 Session 中销毁)中,这样在下一次请求时上一次输入的数据依然有效:

$request->flash();

你还可以使用 flashOnly 和 flashExcept 方法将输入数据子集存放到 Session 中,这些方法在 Session 之外保存敏感信息时很有用,该功能适用于登录密码填写错误的场景:

$request->flashOnly('username', 'email'); 
$request->flashExcept('password');

将输入存储到 Session 然后重定向

如果你经常需要一次性存储输入请求输入并返回到表单填写页,可以在 redirect() 之后调用 withInput() 方法实现这样的功能:

return redirect('form')->withInput(); 
return redirect('form')->withInput($request->except('password'));

取出上次请求数据

要从 Session 中取出上次请求的输入数据,可以使用 Request 实例提供的 old 方法。old 方法可以很方便地从 Session 中取出一次性数据:

$username = $request->old('username');

Laravel 还提供了一个全局的辅助函数 old(),如果你是在 Blade 模板中显示上次输入数据,使用辅助函数 old() 更方便,如果给定参数没有对应输入,返回 null:

<input type="text" name="username" value="{{ old('username') }}">

Cookie

从请求中取出Cookie

为了安全起见,Laravel 框架创建的所有 Cookie 都经过加密并使用一个认证码进行签名,这意味着如果客户端修改了它们则需要对其进行有效性验证。我们使用 Illuminate\Http\Request 实例的 cookie 方法从请求中获取 Cookie 的值:

$value = $request->cookie('name');

添加Cookie到响应

你可以使用 cookie 方法将一个 Cookie 添加到返回的 Illuminate\Http\Response 实例,你需要传递 Cookie 名称、值、以及有效期(分钟)到这个方法:

return response('欢迎来到 Laravel 学院')->cookie( 'name', '学院君', $minutes );

cookie 方法可以接收一些使用频率较低的参数,一般来说,这些参数和 PHP 原生函数 setcookie 作用和意义一致:

return response('欢迎来到 Laravel 学院')->cookie( 'name', '学院君', $minutes, $path, $domain, $secure, $httpOnly );

我们简单演示下该功能的使用,在 routes/web.php 定义两个路由如下:

Route::get('cookie/add', function () { 
    $minutes = 24 * 60;
    return response('欢迎来到 Laravel 学院')->cookie('name', '学院君', $minutes); 
}); 

Route::get('cookie/get', function(\Illuminate\Http\Request $request) { 
    $cookie = $request->cookie('name'); 
    dd($cookie); 
});

先访问 http://blog.dev/cookie/add 设置 Cookie,然后再通过 http://blog.dev/cookie/get 获取 Cookie 值,如果在页面看到输出 学院君,则表示 Cookie 设置成功。

生成Cookie实例

如果你想要生成一个 Symfony\Component\HttpFoundation\Cookie 实例以便后续添加到响应实例,可以使用全局辅助函数 cookie,该 Cookie 只有在添加到响应实例上才会发送到客户端:

$cookie = cookie('name', '学院君', $minutes); 
return response('欢迎来到 Laravel 学院')->cookie($cookie);

我们改写下之前的 cookie/add 路由实现逻辑:

Route::get('cookie/add', function () { 
    $minutes = 24 * 60; 
    //return response('欢迎来到 Laravel 学院')->cookie('name', '学院君', $minutes); 
    $cookie = cookie('name', '学院君X', $minutes); 
    return response('欢迎来到 Laravel 学院')->cookie($cookie); 
});

效果和之前一致,这次访问 cookie/get 路由,页面打印结果是 学院君X。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值