【发布时间】:2015-07-25 00:20:59
【问题描述】:
CodeIgniter 2 在每次 http 调用时重新生成会话 ID。这会导致并发 ajax 调用出现问题。这使得客户端和服务器可能不同步并且会话丢失。对此的修复是不更新 ajax 调用上的会话(请参阅Codeigniter session bugging out with ajax calls)。但是,如果您使用 CodeIgniter 作为单页应用程序的 API,其中每次调用都是 ajax,这只会导致会话根本不会更新。用户在会话超时(默认 5 分钟)后退出。
在 CodeIgniter 3 中,他们试图通过在会话存储上使用写锁(参见 https://github.com/bcit-ci/CodeIgniter/issues/3073)来解决这个问题。因为这依赖于数据库功能,所以只能将会话信息安全地存储在 MySQL 和 PostgreSQL 中。比如 Redis 就不能用了(见http://www.codeigniter.com/userguide3/installation/upgrade_300.html#step-6-update-your-session-library-usage)。
最后我的问题是:Laravel 如何处理这个问题? Laravel 可以使用 Redis 进行会话存储。那么 laravel 什么时候重新生成 session id 呢?而如果 Laravel 没有在每个 http 请求上自动重新生成它,那么在安全方面如何判断呢?
【问题讨论】:
-
Laravel 仅在您登录和注销时重新生成会话 ID。此外,为了发出任何 post 请求,您必须在请求中包含一个 CSRF 令牌(laravel 5 强制执行此操作。laravel 4 这是可选的)。这有助于提高安全性。
-
Redis 非常适合与 CI3 一起使用,您链接的升级说明中有关 MySQL 和 PostgreSQL 的说明仅指“数据库”驱动程序,Redis 不属于该驱动程序。
标签: codeigniter session laravel