【发布时间】:2011-04-30 05:45:31
【问题描述】:
标题几乎说明了一切。饼干对我来说似乎有一些好处;不过,我会等着看别人怎么说。
另外 - 假设 cookie 更好,可以做些什么来更好地通过 GET 变量传递会话?
具体来说,我正在考虑 PHP;但是,这应该普遍适用。
【问题讨论】:
标题几乎说明了一切。饼干对我来说似乎有一些好处;不过,我会等着看别人怎么说。
另外 - 假设 cookie 更好,可以做些什么来更好地通过 GET 变量传递会话?
具体来说,我正在考虑 PHP;但是,这应该普遍适用。
【问题讨论】:
Cookie 是更好的选择。
在 GET 变量中包含会话 ID 的缺点是
网址看起来更丑
它搞砸了链接和书签(尽管这更像是一个外观问题,因为过期的会话将被删除并创建一个新会话)
它的安全性可能稍差(当人们共享包含会话 ID 的链接,并且无意中“劫持”了他们的会话时)。
但是,搜索引擎会从索引 URL 中删除会话 ID,只要它们以标准方案(PHPSESSID、SID...)命名,所以这不是问题。
通常的方法(我认为,PHP 的默认行为)是尽可能使用 Cookie,如果它们被禁用则回退到 GET 变量。
至于如何使 GET 变量“更好” - 使包含它们的 URL 更漂亮的一种方法是使用 URL 重写,因此您可以拥有例如
example.com/category/page/1234567890
123456890 是会话 ID。
但是,请注意,这将导致搜索引擎无法删除会话 ID,因为他们无法判断它是一个。
会话 ID 可能被无意复制并粘贴到新用户的安全问题可以通过低会话超时和反“会话劫持”措施来控制,例如在this question。但是,接受的答案建议使用session.use_only_cookies .....
【讨论】:
将其存储在 cookie 中可防止其被意外添加书签或提供给链接中的某人。
话虽如此,PHP 会自行管理其会话 cookie,因此您无需手动执行此操作。默认情况下,PHP 5.3.0 及更高版本仅使用 cookie (session.use_only_cookies 1)。在此之前,它会默认先尝试 cookie,如果失败则回退以获取变量 (session.use_cookies 1)。
编辑:虽然 PHP 管理自己的会话 cookie,但您可以在调用 session_start() 之前先modify the session cookie's parameters。
【讨论】:
尽管使用 cookie 似乎更安全、更方便,但您可以并且可能应该增强本机会话机制。
PHP 提供了一种方便的方式,但如果您的目标是安全性多于方便性,您希望更改会话处理方面的一些内容。
阅读关于 PHP 会话的 Chris Shiflett 文章以更好地理解。
【讨论】:
我能想到更多使用 cookie 的理由
不使用 cookie 的优点
使用 cookie 的优点
【讨论】:
与 GET var 相比,将其存储在 cookie 中至少有一个优势,即会话 ID 的 URL 永远不会被任何用户添加书签。
【讨论】: