众所周知,每一个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\']);//则是直接修改