Php 在cookie中存储会话id比get var更好吗?

Php 在cookie中存储会话id比get var更好吗?,php,security,session,Php,Security,Session,标题几乎说明了一切。饼干对我来说似乎有一些好处;不过,我会等着看别人怎么说 另外-假设cookie更好,那么可以做些什么来更好地通过GET变量传递会话 具体来说,我想到的是PHP;但是,这通常适用。将其存储在cookie中而不是GET var中至少有一个优点,即会话ID的URL永远不会被任何用户标记为书签。cookie是更好的方法 GET变量中包含会话ID的缺点是 URL看起来更难看 它破坏了链接和书签(尽管这更像是一个表面问题,因为过期的会话将被删除并创建一个新会话) 它的安全性可能会稍差一

标题几乎说明了一切。饼干对我来说似乎有一些好处;不过,我会等着看别人怎么说

另外-假设cookie更好,那么可以做些什么来更好地通过GET变量传递会话


具体来说,我想到的是PHP;但是,这通常适用。

将其存储在cookie中而不是GET var中至少有一个优点,即会话ID的URL永远不会被任何用户标记为书签。

cookie是更好的方法

GET变量中包含会话ID的缺点是

  • URL看起来更难看

  • 它破坏了链接和书签(尽管这更像是一个表面问题,因为过期的会话将被删除并创建一个新会话)

  • 它的安全性可能会稍差一些(当人们共享包含会话ID的链接时,他们的会话会被无意中“劫持”)

但是,搜索引擎将从索引URL中删除会话ID,只要它们以标准方案命名(
PHPSESSID
SID
…),因此这不是问题

通常的方法(我认为,PHP的默认行为)是在可能的情况下使用cookie,如果禁用变量,则返回获取变量

至于如何使GET变量“更好”-使包含它们的URL更漂亮的一种方法是使用URL重写,这样您就可以拥有

example.com/category/page/1234567890 
123456890
作为会话ID

但是,请注意,这将导致搜索引擎无法删除会话ID,因为它们无法判断会话ID是否为会话ID


会话ID可能无意中复制并粘贴到新用户的安全问题可以通过低会话超时和反“会话劫持”措施加以控制,如中所示。但是,公认的答案是建议使用会话。只使用cookies..

将其存储在cookie中可以防止它被意外地添加到书签中或在链接中提供给某人

话虽如此,PHP自己管理它的会话cookie,因此您不需要手动执行。PHP5.3.0及更高版本默认情况下仅使用cookie()。在此之前,默认情况下,它将首先尝试cookies,如果失败,则返回获取变量()


编辑:尽管PHP管理自己的会话cookie,但在调用
会话\u start()
之前,我可以想出更多使用cookie的理由

不使用cookie的优点

  • Cookie可以被禁用,站点仍将工作
  • 使用饼干的好处

  • 更安全
  • 搜索引擎不会为它编制索引
  • 人们不能复制并粘贴到朋友
  • 人们不能把它标在书上
  • 您可以使用cookie expire time轻松使其过期

  • 尽管使用cookie看起来更安全、更方便,但您可以而且可能应该增强本机会话机制

    PHP提供了一种方便的方法,但是如果您的目标是更安全而不是更方便,那么您希望更改会话hadling中的一些内容


    阅读Chris Shiflett关于PHP会话的文章以更好地理解。

    重写URL以获取“goodlooikng”会话ID可能是个坏主意,原因有很多,例如:搜索引擎无法将其剥离;用户不知道它是会话id;当会话id为文件夹/文件时,URl结构变得奇怪。否则,+1一如既往地出现在你的答案上:-)@Emil干杯。你对搜索引擎方面的看法完全正确,我会把这个加进去。