0

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

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

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

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

4

2 回答 2

3

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

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

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

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

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

于 2013-01-22T18:15:32.933 回答
2

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

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

于 2013-01-22T18:23:57.377 回答