(会话与cookie的缺点

时间:2011-03-04 07:31:11

标签: php session session-cookies

我需要有关会话的一些细节。会话变量的缺点是什么? 在cookie和会话之间,哪一个更好?

2 个答案:

答案 0 :(得分:10)

我不会在这里触及安全性,因为Infotekka已经进入了相当多的时间。您似乎在问是否应该使用SESSION或COOKIE,就好像它们是彼此的替代品一样。

他们不是。他们服务器(这是一个错字......但我离开它因为这是一个很好的双关语)不同的目的。

由于HTTP是无状态的,PHP(和其他人)可以通过使用Session来模拟应用程序中的状态机。如果你不这样做,你必须在每个页面之间使用POST / GET来保持数据的一致性,如果用户自己去另一个页面,那么数据就会丢失!因此,如果没有SESSION,您将无法让用户登录到您的网站..至少不是非常一致。

总而言之,SESSION用于在不使用HTTP的情况下长时间保持站点的多个页面之间的数据。这就是它的用途。

我想你可以使用COOKIE来做这件事,但是它作为cookie要复杂得多,特别是在处理序列化到会话的对象时。设置的COOKIE在下一页加载之前也无法访问,必须在脚本输出之前设置(与任何其他标题一样)。

会话应该就是这样 - 用户在他们的计算机上坐了很长时间才能在网站上工作时所拥有的会话。休假时,会话结束。

Cookie应该用于长期存储简单数据。如果他们经常访问网站,他们可能希望记住他们的用户名,因此可以将其存储为cookie。请注意Infotekka注意到的安全问题。

编辑:最后,我应该补充说,COOKIE是在用户和浏览器之间的每个页面请求上传输的。更多Cookie意味着更多的页面加载时间。

答案 1 :(得分:6)

这是一个非常开放的问题,但我认为在PHP中使用会话时应该考虑的最重要的事情是劫持是多么容易。 PHP会话将其所有值存储在服务器缓存中,并根据写入客户端cookie的会话ID检索它。只要该会话处于活动状态,就会授予与该会话ID连接的客户端访问该会话的权限。

有一些可怕的程序,比如firesheep,可以告诉你抓住会话ID并使它成为你自己的容易程度。如果您要在该会话上建立任何安全性,您需要确保您所做的一切都是通过SSL进行的,并且您应该构建第二层验证以确保您的会话未被劫持。

所有这一切,会话是存储持久值的好地方,您需要在用户的应用程序体验的生命周期中访问这些值。