【问题标题】:Saving data for those with cookies disabled [closed]为禁用 cookie 的用户保存数据 [关闭]
【发布时间】:2013-08-27 05:38:02
【问题描述】:

我有一个具有登录功能的网站,我正在将用户的用户名存储到一个 cookie 中。

我有几个问题:

  1. 如果我想保存此人的用户名,应该仅作为会话还是 cookie 来完成?
  2. 我应该为那些禁用 cookie 的人做些什么?我应该不存储任何东西,让他们每次都登录吗?

谢谢。

【问题讨论】:

  • 如果 cookie 被禁用,会话 cookie 仍然使用直接 URL 作为 GET 变量。 ?session=d41d8cd98f00b204e9800998ecf8427e 我建议显示某种页面,指示用户应该启用 cookie。
  • 您应该检查一下 HTML5 本地存储
  • @DaveChen 不喜欢将信息放入 URL。 :P

标签: php


【解决方案1】:
  1. 用户的详细信息应保存在会话中。会话变量存储在服务器上,只有会话 ID 暴露给用户。使用 cookie 长期保存登录状态。确保安全地进行。
  2. 禁用 cookie 的用户只能通过 GET 变量使用会话。会话 ID 通过 URL 传回服务器。

请参阅 How do Cookies and Sessions work? 了解更多信息。

【讨论】:

  • 应该在每次页面加载时检查 cookie 以确保安全性还是仅在用户登录时检查?
  • @ErikFischer:应首先检查会话。如果没有会话 ID,请检查 cookie 以验证用户。总而言之,没有什么比老式的再次提交登录表单更好的了,以确保用户是他所说的那个人。有关安全 cookie 的更多信息,请阅读jaspan.com/improved_persistent_login_cookie_best_practice
  • 这是我登录页面的一小部分。这安全吗?顺便说一句,我在用户登录后在其他页面上使用/显示 cookie:http://pastebin.com/eKmzPq7m
  • @ErikFischer:您的 cookie 不安全。您只保留用户的用户名,这意味着您的服务器会盲目地认为 cookie 中写入的任何用户名都是用户的实际用户名。出于这个原因,您不需要知道用户的密码来登录他的帐户,只需知道他的用户名(因为如果我将 cookie 更改为“Admin”,我将立即登录到该用户名的帐户)。阅读我链接的文章以获得更彻底和安全的方式。
【解决方案2】:

如果我想保存此人的用户名,应该仅作为会话还是 cookie 来完成?

实现会话的标准方法是使用 cookie。唯一的问题是您是否要存储一个持久性 cookie,以便他们在关闭浏览器然后稍后再回来时不必再次登录。

我应该为那些禁用 cookie 的人做些什么?我应该不存储任何东西,让他们每次都登录吗?

虽然您可以通过通过每个链接的查询字符串和每个表单中的隐藏输入传递令牌来实现会话系统,但这种方法很容易泄露会话(因为人们会复制/粘贴 URL 并将它们提供给其他人)人)并且需要更多的努力(尤其是当您开始使用 JavaScript 将浏览器定向到 URL 时)。

Cookie 是在 WWW 上保持状态的标准方式,对于依赖于状态(例如跟踪谁已登录)的网站部分而言,仅在用户启用 Cookie 时才起作用是完全合理的。

禁用cookies的用户是极少数,如果他们想登录网站,可以重新启用它们。

【讨论】:

    【解决方案3】:

    Surly session 更好,如果您将其保存为 cookie,任何人都可以通过它进行注入。编辑他/她的浏览器 cookie 以以其他用户身份登录。但也许最好阅读 session hijacking .

    您可以使用Web Storage,而不是使用现代浏览器的cookie。

    【讨论】:

    • 他们是否真的以其他用户的身份“登录”(例如,他们可以用自己的名字发帖等)还是只是在他们的屏幕上显示其他人的名字?
    • 这取决于您的代码,如果您使用保存的包含用户名的 cookie 对用户进行身份验证,它会以另一个身份登录并且可以像他/她一样行事。
    • 一次,它被称为localStorage,其次:w3schools 是一个错误且具有误导性的网站。您不应将其用作任何语言的参考。对于 PHP,有 PHP Manual,对于 JavaScript,有 Mozilla Developer Network (or MDN)。请参阅w3fools.com 以进一步了解为什么您不应该使用 w3schools。
    • 本地存储 + 会话存储 = Web 存储 :)
    • @MadaraUchiha:看看sitepoint.com/html5-web-storage
    【解决方案4】:

    如果您只保存用户名以便“记住”用户而不是密码,那么使用 cookie 应该没问题。但是,当为每次使用(即会话)保留用户登录信息时,您应该始终使用会话。换句话说,仅将 cookie 用于从一次使用到下一次使用所需的非安全信息,并将会话用于每次使用所需的安全信息。

    【讨论】:

    • 真的吗?您确定吗?因为我可以把我的cookie改成“Admin”,然后我突然登录到了admin的账户!
    • 您仍然需要知道管理员密码才能实际登录。
    • 不,你不会。如果您的 cookie 只保留用户名,而服务器只会相信该 cookie 中写入的任何内容都是真实的,那么我只需要知道管理员的用户名即可。服务器会相信我是他,因为我有他的密码。
    • 但是你没有他的密码……你只有他的用户名。
    • 所以说我有这个 cookie,username=Madara,一切都很好。当我访问服务器时,我展示了我的 cookie,服务器将我认证为“马达拉”。如果我将浏览器中的 cookie 更改为 username=LeeBlake,会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2018-03-25
    相关资源
    最近更新 更多