Laravel 5.1 中 Session 数据存储、访问、删除及一次性Session实例教程
1、Session的由来及其实现
HTTP协议是无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的。也就是说我们无法在服务器端确认两次请求是否是同一个用户所为,这为我们在一些应用场景中实现在多次请求间记住用户状态带来麻烦,比如电子商务网站,用户浏览商品、加入购物车、下单、购买需要多个请求才能完成,如果在这些请求之间无法记住用户状态,根本无法完成正常的购买行为,为此,引入了Session的概念,其目的就是在请求中记住用户状态。
Session的实现机制有两种,一种是我们通常所见的基于Cookie,即将针对每个用户生成的唯一Session ID存放在Cookie中,然后用户每次请求都会带上这个Session ID,这样服务器端就能判断是否是同一个用户,这种机制需要浏览器支持Cookie(现在的浏览器默认都支持);另一种是将基于URL重写,即将Session ID作为参数放到URL中,这样每次请求也会带上Session ID,当浏览器不支持Cookie时可以使用这种方式。
上述两种实现机制是针对客户端的,服务器端也可以将Session存放到不同介质,常见的存储方式有文件、数据库、 Memcached 和Redis等。和之前的缓存、队列一样,Laravel也为不同的存储提供了统一的接口,下面我们就来看一下如何在Laravel中实现Session的存储、访问、删除以及更多其它用法。
2、Session配置
Laravel 中 Session 配置文件位于
config/session.php ,默认设置如下:
return [
"driver" => env("SESSION_DRIVER", "file"),
"lifetime" => 120,
"expire_on_close" => false,
"encrypt" => false,
"files" => storage_path("framework/sessions"),
"connection" => null,
"table" => "sessions",
"lottery" => [2, 100],
"cookie" => "laravel_session",
"path" => "/",
"domain" => null,
"secure" => false,
];
driver 配置项用于设置Session存储方式,默认是
file ,即存储在文件中,该文件位于 files 配置项配置的路径,即 storage/framework/sessions 。此外Laravel还支持其它存储方式:
database:将Session数据存放到指定数据表中,该数据表由配置项table设置memcached:将Session数据存放到Memcached中redis:将Session数据存放到Redis中array:将Session数据存放到数组中,该配置仅用于测试环境
要修改 driver 配置,需要去项目根目录下
.env 文件修改其中的 SESSION_DRIVER 选项。
lifetime 配置项用于设置Session有效期,默认为120分钟。
expire_on_close 配置项用于设置是否在浏览器关闭时立即让Session失效。
encrypt 配置项用于配置Session数据是否加密。
lottery 配置项用于配置回收Session存放位置。
cookie 配置项用于配置存放Session ID的Cookie名称,默认是
laravel_session。 path 配置项用于配置存放Session ID的Cookie存放路径,默认为项目根目录。
domain 配置项用于配置存放Session ID的Cookie存放域名。
secure 配置项用于配置是否只有在HTTPS协议下发送Session ID到服务器。
- 上一篇: Session的默认保存路径
- 下一篇: PHP程序的AES加密解密算法
