【问题标题】:Does Laravel regenerate the Session ID? (compared to CodeIgniter)Laravel 会重新生成 Session ID 吗? (与 CodeIgniter 相比)
【发布时间】: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


【解决方案1】:

就像 pstephan1187 指出的那样,“Laravel 仅在您登录和注销时重新生成会话 ID”。 CSRF Protection 用于对抗 cross-site request forgeries,它包含一个在 POST、PUT 和 DELETE 请求中默认 (Laravel 5) 必需的字段。

在 ajax 调用中处理这个超出了 Laravel 提供的功能,但可以很容易地使用 worked around

有关 Laravel 会话的更多信息,请参阅 the official documentation(顺便说一下,这是一本非常好且易于理解的读物)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2015-04-03
    相关资源
    最近更新 更多