laravel session

Posted MrBear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel session相关的知识,希望对你有一定的参考价值。

众所周知,每一个session都要经历从启用,存取,到最后的删除这样一个过程,在laravel中是如何处理session的呢?在laravel里,没有使用php内置的 session功能,而是自己开发了新的Session,并且通过中间件直接帮我们开启了Session,那么它是如何启用的,又是怎么处理生命周期的呢,并且都有哪些可以供我们使用的方法呢,一起探讨一下.

laravel Session的启用:

在laravel的核心类文件中(app/Http/Kernel.php)我们可以看到StartSession中间件在优先启用的中间件中位列第一,

打开StartSession.php这个文件,在这里,我们不仅可以看到具体的启用session方法,还可以看到处理session生命周期的函数

 protected function getSessionLifetimeInSeconds()
    {
        //调用SessionManager.php文件中的getSessionConfig函数,获取session配置文件中的\'lifetime\'参数,在这个参数里设置了session的生命周期时间.
        return ($this->manager->getSessionConfig()[\'lifetime\'] ?? null) * 60;
    }

相关Session方法

在Illuminate\\Session\\Store.php目录中,我们可以看到为Session量身定制的一些方法,这些方法,在实现Auth快速创建登录和注册功能时都有被用到,感兴趣的话,可以打开该文件去查看

Session配置

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

    \'driver\' => env(\'SESSION_DRIVER\', \'file\'),    //session驱动,默认为flie驱动
    \'lifetime\' => env(\'SESSION_LIFETIME\', 120),      //生命周期,默认为120分钟
    \'expire_on_close\' => false,    //关闭浏览器是否自动删除session
    \'encrypt\' => false,    //存储的session数据是否需要加密
    \'files\' => storage_path(\'framework/sessions\'),    //file驱动保存路径,默认为storage/framework/sessions/下
    \'connection\' => env(\'SESSION_CONNECTION\', null),    //如果使用数据库驱动或者redis驱动时,连库管理session
    \'table\' => \'sessions\',     //使用数据库驱动时,创建的session表名 
    \'store\' => env(\'SESSION_STORE\', null),    //使用apc 或者memcached驱动的配置
    \'lottery\' => [2, 100],    //清除旧session
    \'cookie\' => env(    //cookie名称
        \'SESSION_COOKIE\',
        Str::slug(env(\'APP_NAME\', \'laravel\'), \'_\').\'_session\'
    ),    
    \'path\' => \'/\',    //cookie
    \'domain\' => env(\'SESSION_DOMAIN\', null),
    \'secure\' => env(\'SESSION_SECURE_COOKIE\', false),
    \'http_only\' => true,    //将此值设置为true将阻止javascript访问cookie的值
    \'same_site\' => null,

通过这里我们可以看到在.env环境中有与session对应的相关参数,如果需要,可以自由定义

修改配置的方法

  • 手动修改config目录下的session文件
  • 使用config()函数,例如
config(\'session.lifetime\');//直接获取session文件中\'lifetime\'这个参数
config([\'session.lifetime\'=>\'20\']);//则是直接修改

以上是关于laravel session的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何在控制器的几种方法中重用代码片段

C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段

Laravel5为啥设置session的lifetime时间就是没有用的

Laravel Session Flash 持续存在 2 个请求

PHP笔记-laravel中Request和Session相关使用

Laravel 会话数据不会跨页面加载