Laravel 是否重新生成会话 ID?(与 CodeIgniter 相比)

Ale*_*lex 5 session codeigniter laravel

CodeIgniter 2 在每次 http 调用时重新生成会话 ID。这会导致并发 ajax 调用出现问题。这使得客户端和服务器可能不同步并且会话丢失。对此的修复不是在 ajax 调用上更新会话(请参阅Codeigniter 会话因 ajax 调用而出错)。但是,如果您将 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 请求上自动重新生成它,如何在安全方面进行判断?

Osk*_*D90 1

就像 pstephan1187 指出的那样,“Laravel 仅在您登录和注销时重新生成会话 ID”。CSRF 保护用于防止跨站点请求伪造,它由 POST、PUT 和 DELETE 请求中默认(Laravel 5)所需的字段组成。

在 ajax 调用中处理这个问题超出了 Laravel 提供的功能范围,但可以很容易地解决

有关 Laravel 会话的更多信息,请参阅官方文档(顺便说一句,这是一本非常好的且易于理解的读物)。