【问题标题】:What to use when cookies are disabled禁用 cookie 时使用什么
【发布时间】:2014-10-16 13:26:06
【问题描述】:

我正在创建一个简单的网站,如果我的用户的 cookie 被禁用,我有点想不通该怎么做。如果一个人要登录并闲置几分钟,如果他们的 cookie 被禁用,我将如何让该用户保持登录状态并识别?

【问题讨论】:

  • Cookie 是维护会话的标准方式。很少有人禁用它们,如果他们想登录,请让这样做的人允许您的网站设置它们并不是没有道理的。
  • @BrianDriscoll — 当人们与朋友分享 URL 时会话令牌会泄漏,而当他们为页面添加书签时会话令牌会变得陈旧。
  • 作为练习,您可以使用 $_POST 或 $_GET 发送会话 id 以与服务器上的数据库进行比较。但总的来说,我同意昆汀的评论。
  • @Quentin 是的,我知道,但如果禁用的 cookie 确实是一个问题,那么它是我能想到的解决它的仅有的 2 或 3 种方法之一。另一个是将会话 ID 作为 HTTP 请求/响应标头发送,但这会暴露相同的问题。
  • @BrianDriscoll:可能会告诉用户“没有 cookie,没有登录”。我完全支持禁用第 3 方 cookie 以防止广告网络跟踪,但没有理由禁用第 1 方 cookie,尤其是因为它禁用了这么多“标准”网络功能。

标签: php login session-cookies


【解决方案1】:

另一个适用于现代浏览器的选项是使用Web Storage。这也被建议作为首选replacement to cookies。 (browser support) 首先检查浏览器中是否提供 cookie 或 Web 存储,使用您喜欢的设置值来检查。然后,您可以退回到 @TravelingTechGuy 建议的隐藏会话数据,然后您可以从那里要求您的用户遵守或限制访问。

我同意 URL 中的会话数据不是一个好主意,原因是 OP 的 cmets 中提到的原因。

“页面上隐藏的会话数据”的唯一缺点(我能想到的 ATM)可能是代码中的后端“会话泄漏”。您不希望在 HTML 中意外地将错误的会话 ID 发送回客户端,因为您必须通过每次将数据发送到服务器并返回来将数据保留在页面中(除非您使用某些单页应用程序样式来保持该数据)会话数据仅限本地)。最好您只想检查提交的会话 ID 并从那里做出反应。

如果您怀疑您可能会因为某些限制而失去可能影响您的服务的用户群,最好尝试提供尽可能多的检查和回退。

【讨论】:

    【解决方案2】:

    如果 cookie 被阻止,您的选择是:

    1. 将 URL 中的会话 ID 作为参数传递。
    2. 在页面中嵌入会话 ID(当然是在隐藏元素中),并使用 JavaScript 引用它。

    顺便说一句,最近我看到几个网站说我的浏览体验会受到严重限制,只要在我的浏览器中禁用 cookie。根据我需要网站功能的程度,我将启用 cookie、使用启用 cookie 的其他浏览器,或者决定完全跳过该网站。

    【讨论】:

    • Pass the session ID in the URL as a parameter 可能存在安全风险,因为浏览器可能会在 referer 标头中发送 URL 并泄露会话 ID。它还将默认存储在浏览器历史记录、代理和服务器日志中。
    • 变通办法,就其本质而言,更危险。但是,如果您管理好会话,将它们设为临时的,并且可能与初始 IP 绑定,您可以在一定程度上降低风险。
    【解决方案3】:

    您可以尝试使用 Flash cookie。如果您获得 Flash 5 的副本,它可以在未经许可的情况下运行(甚至没有文档记录,但它可以运行)。不过,这确实是一个肮脏的黑客行为。

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 2012-12-02
      • 2015-12-12
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 2013-11-21
      相关资源
      最近更新 更多