【问题标题】:Is storing a session id in a cookie a better practice than a get var?在 cookie 中存储会话 id 是否比 get var 更好?
【发布时间】:2011-04-30 05:45:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: php security session


    【解决方案1】:

    Cookie 是更好的选择。

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

    • 网址看起来更丑

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

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

    但是,搜索引擎会从索引 URL 中删除会话 ID,只要它们以标准方案(PHPSESSIDSID...)命名,所以这不是问题。

    通常的方法(我认为,PHP 的默认行为)是尽可能使用 Cookie,如果它们被禁用则回退到 GET 变量。

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

    example.com/category/page/1234567890 
    

    123456890 是会话 ID。

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

    会话 ID 可能被无意复制并粘贴到新用户的安全问题可以通过低会话超时和反“会话劫持”措施来控制,例如在this question。但是,接受的答案建议使用session.use_only_cookies .....

    【讨论】:

    • 重写 URL 以获取“goodlooikng”会话 ID 可能是一个坏主意,原因有很多,例如: 搜索引擎无法删除它;用户不知道这是一个会话 ID;当会话 id 是文件夹/文件时,URl 结构变得奇怪。否则,一如既往地为您的答案 +1 :-)
    • @Emil 欢呼。您对搜索引擎方面的看法完全正确,我将其添加进去。
    【解决方案2】:

    将其存储在 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

    【讨论】:

      【解决方案3】:

      尽管使用 cookie 似乎更安全、更方便,但您可以并且可能应该增强本机会话机制。

      PHP 提供了一种方便的方式,但如果您的目标是安全性多于方便性,您希望更改会话处理方面的一些内容。

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

      【讨论】:

        【解决方案4】:

        我能想到更多使用 cookie 的理由

        不使用 cookie 的优点

        1. Cookie 可以被禁用,网站仍然可以工作

        使用 cookie 的优点

        1. 更安全
        2. 搜索引擎不会将其编入索引
        3. 不能复制粘贴给朋友
        4. 人们无法为其添加书签
        5. 您可以使用 cookie 过期时间轻松将其过期

        【讨论】:

          【解决方案5】:

          与 GET var 相比,将其存储在 cookie 中至少有一个优势,即会话 ID 的 URL 永远不会被任何用户添加书签。

          【讨论】:

            猜你喜欢
            • 2021-10-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-06
            • 2011-03-31
            • 2018-11-06
            • 2014-11-05
            • 2010-12-29
            相关资源
            最近更新 更多