【问题标题】:Codeigniter what is the point of storing session data in the cookie ONLY? [duplicate]Codeigniter 仅在 cookie 中存储会话数据有什么意义? [复制]
【发布时间】:2013-07-09 23:34:11
【问题描述】:

所有 CI 用户都知道默认情况下会话存储在 cookie 中。

但是这个实现的真正意义是什么?实在找不到好理由。

好的,在共享服务器中,人们可能会访问会话文件,但客户端呢?我也可以更改 cookie 中的数据,并且作为一种“单向”方法,我什至如何验证服务器端会话 cookie 中的数据? 我觉得这很奇怪,更不用说 cookie 可能会遇到大小问题。

我知道数据库方法,但是如果我在具有完全控制权的专用服务器中并且我不想浪费数据库资源来在单个页面上查询会话表,那将不会更灵活/默认提供经典的 PHP 方法是否有用,以便我可以使用 cookie 中的 ID 验证数据?

【问题讨论】:

    标签: codeigniter session cookies


    【解决方案1】:

    您可以使用 CSRF 保护并对 cookie 进行加密,以加强系统对 cookie 的操纵。

    但是,如果您担心安全性,那么您绝对应该将数据库用于会话。除非您有大量用户,否则对 db 的影响可以忽略不计。如果您确实有大量用户,那么考虑在会话查找时分配工作负载的时间将是您最不必担心的问题。

    客户端 cookie 更多用于状态。它们可用于登录表单上的“记住我”或页面布局等。它们不应用于保护您的应用程序。

    如果您不使用数据库会话,则无法通过 cookie 验证会话,因为应用程序没有存储会话 ID 的位置。

    请参阅http://ellislab.com/codeigniter/user-guide/libraries/sessions.html 了解更多详情。

    【讨论】:

      【解决方案2】:

      基于 Cookie 的会话为存储会话信息提供了一种轻量且快速的机制。它们也是安全的。每个 cookie 都使用强 AES-256 加密进行加密。但是,cookie 有 4 KB 的存储限制,因此如果您在会话中存储大量数据,您可能希望使用另一个驱动程序。数据根据配置中的散列进行加密,CI 还会间歇性地对散列运行更新以提高安全性。将会话存储在 cookie 或数据库中也更适合高负载下的服务器场或集群。许多大公司和其他高流量网站在他们的会话中使用这种策略。

      话虽如此,我理解限制为 4kb 数据、拥有数据客户端以及在每个页面加载时将数据显示为请求的担忧。但是,没有什么可以阻止您手动使用默认 PHP 会话或滚动您自己的会话库。

      【讨论】:

        猜你喜欢
        • 2011-12-31
        • 1970-01-01
        • 2014-12-30
        • 1970-01-01
        • 2020-11-10
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        相关资源
        最近更新 更多