laravel框架session使用教程

2019-09-30 作者:网络时代   |   浏览(191)

用Laravel开发应用,把原有的代码copy过来,以前的代码session使用了$_SESSION,本以为移植过来可以很好的运行的,因为没有依赖其他的组件,结果出现了这个

1、中间件简介
Laravel中可以把HTTP中间件看做“装饰器”,在请求到达最终动作之前对请求进行过滤和处理。

Undefined variable: _SESSION
Laravel的session的配置文件配置在 app/config/session.php 中,使用时可以看看 session 配置文件中可用的选项设定及注释。

中间件在Laravel中有着广泛的应用,比如用户认证、日志、维护模式、开启Session、从Session中获取错误信息,以及上一篇教程中提到的CSRF验证,等等。

Laravel 默认使用 file 的方式来实现 session的。她并不用php原生的$_SESSION(php原生的session要看php.ini的位置),所以忽略php相关的session函数,例如session_start(), $_SESSION。Laravel在运行过程中会在app/storage/session/目录写入session的信息,所以这个目录需要有写权限,否者session就无法写入成功。

中间件类默认存放在app/Http/Middleware目录下。

Laravel除了使用默认的file作为session的实现,还支持cookie, Memcached, Redis 和数据库的后端驱动作为session的实现。必要的时候还需要自己实现一个session的实现方式,比如在微信公众账号和用户的交互,这中session就无法直接使用,因为每次都是微信服务器来请求,无法通过请求的来源来辨别用户。

2、中间件创建及其使用
我们在《HTTP路由实例教程(二)—— 路由命名和路由分组》一文已经演示了如何创建中间件以及中间件的基本使用。

laravel的session简要API

自定义中间件类只需要定义一个handle方法即可,然后我们将主要业务逻辑定义在该方法中,如果我们想在请求处理前执行业务逻辑,则在$next闭包执行前执行业务逻辑操作:

Session的API还是比较简单的,大家看看中文文档也大概知道是怎么个意思。但是有那么几个还不太好理解。

<?php

//session的永久保存(在不过期范围内)
Session::put('key', 'value');
 
//等同于PHP的原生session
$_SESSION['key'] = 'value';
 
//get操作
$value = Session::get('key', 'default');
 
//去除操作并删除,类似pop概念
$value = Session::pull('key', 'default');
平台首页, 
//检测是否存在key
Session::has('users');
 
//删除key
Session::forget('key');
这个对应只要session不过期,基本上是永久保存,下次http请求也是存在的。不同于下面的flash概念。

namespace AppHttpMiddleware;

laravel的session中flash概念

use Closure;

但是Laravel出了个快闪flash的概念,把我一下子给搞混了。这个flash两次请求有效(本次和下次请求有效),与本次请求取操作多少次无关。

class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // 执行业务逻辑操作

//保存key,value
Session::flash('key', 'value');
 
//取值方法还是一样的
Session::get('key');
 
//刷新快闪数据时间,保持到下次请求
Session::keep(array('username', 'email'));
这个flash的概念和上面的put的概念不太一样。

        return $next($request);
    }
}
如果想要在请求处理后执行中间件业务逻辑,则在$next闭包执行后执行操作:

put :这个对应只要session不过期,基本上是永久保存,下次请求也是存在的。
flash :保存的值,本次请求可以使用,下次http请求可以使用,再下一次就不存在了。
也就是说下一次的请求用完就被销毁了,不会让session的值变的越来越大,可以保存一些临时的数据。

<?php

这中情况的使用场景比如有:

namespace AppHttpMiddleware;

用户请求了页面,出现错误信息,重定向到一个新的页面,需要展示之前的数据。(虽然可以通过url参数来传递,处理不好可能会有xss漏洞)。
用户访问了一个页面,过滤器发现没权限,保存当前页面url,重定向到登录页面,登录成功,取出值,重定向到原先的页面。(这里可能需要刷新保存的快闪数据)
session落地的时间

use Closure;

我天真的以为使用了Session::put函数就能保存这个变量了。于是我的代码这样写:

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

本文由澳门新葡亰网址大全发布于网络时代,转载请注明出处:laravel框架session使用教程

关键词: