【发布时间】:2011-07-08 15:17:48
【问题描述】:
我需要一些有关会话的详细信息。会话变量的缺点是什么? 在 cookie 和会话之间,哪个更好?
【问题讨论】:
标签: php session session-cookies
我需要一些有关会话的详细信息。会话变量的缺点是什么? 在 cookie 和会话之间,哪个更好?
【问题讨论】:
标签: php session session-cookies
我不打算在这里讨论安全问题,因为 Infotekka 已经深入研究了很多内容。您似乎在问是否应该使用 SESSION 或 COOKIE,就好像它们是彼此的替代品一样。
他们不是。他们服务于不同的目的(这是一个错字..但我要离开它,因为这是一个很好的双关语)。
由于 HTTP 是无状态的,PHP(和其他)提供了通过使用 Session 在您的应用程序中模拟状态机的能力。如果您不这样做,则必须在每个页面之间使用 POST/GET 以保持数据一致,如果用户自行转到另一个页面,则该数据将丢失!因此,如果没有 SESSION,您将无法让用户登录您的网站.. 至少不会非常一致。
总而言之,SESSION 用于在您网站的多个页面之间保存数据,而无需长时间使用 HTTP。这就是它的用途。
我想您可以使用 COOKIE 来执行此操作,但它作为 cookie 要复杂得多,尤其是在处理序列化到会话的对象时。设置的 COOKIE 在下一页加载之前也无法访问,并且必须在脚本的任何输出之前设置(与任何其他标题一样)。
会话应该就是这样 - 用户在计算机上坐下来在网站上工作多长时间时所进行的会话。离开时,会话结束。
Cookies 应该用于长时间存储简单数据。如果他们经常访问该网站,他们可能希望为他们记住他们的用户名,以便可以将其存储为 cookie。请注意 Infotekka 指出的安全问题。
编辑:最后,我应该补充一点,用户和浏览器之间的每个页面请求都会传输 COOKIE。更多 Cookie 意味着更多页面加载时间。
【讨论】:
这是一个非常开放的问题,但我认为在 PHP 中使用会话时应该考虑的最重要的事情是劫持有多容易。 PHP 会话将其所有值存储在服务器缓存中,并根据写入客户端 cookie 的会话 ID 来检索它。只要该会话处于活动状态,与该会话 ID 连接的客户端将被授予访问该会话的权限。
那里有一些可怕的程序,例如 firesheep,它们可以向您展示获取会话 ID 并使其成为您自己的会话 ID 是多么容易。如果您要在该会话上建立任何安全性,您需要确保您所做的一切都是通过 SSL 进行的,并且您应该构建一些第二层验证以确保您的会话没有被劫持。
话虽如此,会话是存储持久值的好地方,您需要在用户应用程序体验的整个生命周期中访问这些值。
【讨论】: