代码之家  ›  专栏  ›  技术社区  ›  Tim Lytle

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

  •  4
  • Tim Lytle  · 技术社区  · 14 年前

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

    具体来说,我考虑的是PHP;但是,这应该普遍适用。

    5 回复  |  直到 12 年前
        1
  •  3
  •   Community agent420    7 年前

    饼干是更好的选择。

    在GET变量中使用会话ID的缺点是

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

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

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

    这里通常的方法(我认为,PHP的默认行为)是尽可能使用cookie,如果变量被禁用,则返回获取变量。

    至于如何使GET变量“更好”-使包含它们的URL更漂亮的一种方法是使用URL重写,因此您可以使用例如。

    example.com/category/page/1234567890 
    

    123456890

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

    会话ID可能无意中被复制+粘贴到新用户的安全问题可以通过低会话超时和反“会话劫持”措施来控制,如 this question . 然而,公认的答案建议使用 session.use_only_cookies

        2
  •  4
  •   karim79    14 年前

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

        3
  •  1
  •   Amir Raminfar Hadi Rasouli    14 年前

    不使用cookie的优点

    1. Cookie可以被禁用,站点仍将工作

    使用饼干的好处

    1. 搜索引擎不会索引它
    2. 人们不能复制粘贴给朋友
    3. 您可以使用cookie expire time轻松使其过期
        4
  •  1
  •   Davis Peixoto    14 年前

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

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

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

        5
  •  1
  •   Powerlord    14 年前

    将它存储在cookie中可以防止它被意外地添加到书签或被给予链接中的某个人。

    话虽如此,PHP自己管理会话cookie,因此不需要手动操作。默认情况下,PHP 5.3.0及更高版本仅使用cookies( session.use_only_cookies 1 session.use_cookies 1 ).

    编辑:尽管PHP管理自己的会话cookie,但是您可以 modify the session cookie's parameters 打电话之前 session_start() .