欢迎光临
感谢一路有你

laravel5.4 | session

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

默认file驱动

支持的类型驱动

  • file – Session 数据存储在 storage/framework/sessions 目录下;
  • cookie – Session 数据存储在经过加密的安全的 Cookie 中;
  • database – Session 数据存储在数据库中
  • memcached / redis – Session 数据存储在 Memcached/Redis 中;
  • array – Session 数据存储在简单 PHP 数组中,在多个请求之间是非持久化的。

数据库驱动

使用 database 作为 Session 驱动时,需要设置表包含 Session 字段

使用 Artisan 命令 session:table 来生成迁移:

Redis

在 Laravel 中使用 Redis 作为 Session 驱动前,需要通过 Composer 安装 predis/predis 包。可以在 database 配置文件中配置 Redis 连接,在 Session 配置文件中,connection 选项用于指定 Session 使用哪一个 Redis 连接。

使用session

获取数据可以使用session辅助函数 或request

还可以传递默认值作为第二个参数到 get 方法,默认值在指定键在Session 中不存在时返回

 

session

获取所有session值all

判断是否存在has

存储数据 put

推送数据到数组session      push

获取并删除数据 pull

一次性数据flash

在更多请求中保持该一次性数据,可以使用 reflash 方法

删除数据 forget

重新生成sessionid

关于session fixation 攻击可参考这篇文章:http://www.360doc.com/content/11/1028/16/1542811_159889635.shtml

如果你使用内置的 LoginController 的话,Laravel 会在认证期间自动重新生成 session id,如果你需要手动重新生成session ID,可以使用 regenerate 方法:

 

添加自定义session驱动

实现驱动

自定义 Session 驱动需要实现 SessionHandlerInterface 接口,该接口包含少许我们需要实现的方法,比如一个 MongoDB 的实现如下:

注:Laravel 默认并没有附带一个用于包含扩展的目录,你可以将扩展放置在任何地方,这里我们创建一个 Extensions 目录用于存放 MongoHandler

由于这些方法并不是很容易理解,所以我们接下来快速过一遍每一个方法:

  • open 方法用于基于文件的 Session 存储系统,由于 Laravel 已经有了一个 file Session 驱动,所以在该方法中不需要放置任何代码,可以将其置为空方法。
  • close 方法和 open 方法一样,也可以被忽略,对大多数驱动而言都用不到该方法。
  • read 方法应该返回与给定 $sessionId 相匹配的 Session 数据的字符串版本,从驱动中获取或存储 Session 数据不需要做任何序列化或其它编码,因为 Laravel 已经为我们做了序列化。
  • write 方法应该将给定 $data 写到持久化存储系统相应的 $sessionId, 例如 MongoDB, Dynamo 等等。再次重申,不要做任何序列化操作,Laravel已经为我们处理好了。
  • destroy 方法从持久化存储中移除 $sessionId 对应的数据。
  • gc 方法销毁大于给定 $lifetime 的所有 Session 数据,对本身拥有过期机制的系统如 Memcached 和 Redis 而言,该方法可以留空。

注册驱动

驱动被实现后,需要准备将其注册到框架,要添加额外驱动到 Laravel Session 后端,可以使用 Session门面上的 extend 方法。我们在服务提供者的 boot 方法中调用该方法:

 

Session 驱动被注册之后,就可以在配置文件 config/session.php 中使用 mongo 驱动了。

 

 

 

 

 

赞(0) 打赏
未经允许不得转载:王明昌博客 » laravel5.4 | session
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

隐藏
变装