Codeigniter只在cookie中存储会话数据是什么意思?

时间:2013-01-22 17:08:33

标签: codeigniter session cookies

所有CI用户都知道默认会话存储在Cookie中。

但是这个实现到底是什么意思呢?我真的找不到一个好理由。

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用CSRF保护并加密Cookie以加强系统以防止Cookie操作。

但是,如果您担心安全性,那么 应该使用数据库进行会话。除非您拥有大量用户,否则对数据库的命中率可以忽略不计。如果您确实拥有大量用户,那么考虑分配会话查找工作量的时间将是您最不担心的问题。

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

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

有关详细信息,请参阅http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

答案 1 :(得分:2)

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

据我所知,我理解被限制为4kb数据,拥有数据客户端,并且每次页面加载时数据都显示为REQUEST的问题。但是,没有什么可以阻止您手动使用默认的PHP会话或滚动自己的会话库。