如果 cookie 被禁用会怎样?

Posted

技术标签:

【中文标题】如果 cookie 被禁用会怎样?【英文标题】:What happens if cookies are disabled? 【发布时间】:2012-03-20 16:38:02 【问题描述】:

这里是一个非常基本的问题。在 php 中,如果用户的浏览器禁用了 cookie,您不能同时使用服务器 cookie ($_SESSION) 和客户端 cookie ($_COOKIE, setcookie) 还是只有后者被禁用? 基本上你不能让用户登录或做任何需要会话的事情,对吧?

另外,在什么情况下有人希望禁用 cookie?

谢谢!

【问题讨论】:

【参考方案1】:

是的,这是真的。会话和普通 cookie 都是普通 cookie。如果用户不接受 cookie,他将无法使用它们启用的任何功能。这意味着该用户几乎整个互联网都会中断,这就是为什么在当今时代几乎没有人完全禁用 cookie。

PHP 有一个称为transparent session ids 的内置机制,它会自动重写所有链接以在查询参数中包含会话ID。我不建议使用它,因为 URL 中的会话 ID 会打开一个全新的蠕虫罐。

为了用户友好,我建议您测试用户是否启用了 cookie(设置 cookie,重定向到下一页,并在 URL 中设置 cookie 应该的标志,看看你是否得到任何cookies),如果没有,请建议用户启用它们。

【讨论】:

这个答案+1。随机的想法..你认为 trans-sid 与 SSL 结合是否可以接受? (因为查询参数是 ssl'ed)? @Ben 问题不在于缺少 SSL,而是用户不会理解 URL 包含会话并将包含 trans-sid 的 URL 发送给朋友。单击该链接将使朋友以用户身份登录。 @Ben 不。问题不在于可见性。如果有人能够拦截任何一个 cookie,则 cookie 与 URL 一样可见。问题在于共享 URL,将它们放在浏览器历史记录中等。 @both。是的,很好,我完全忽略了这方面 我完全禁用了 cookie。我逐个站点启用它们。还不错。【参考方案2】:

您可以通过$_GET跟踪用户。

想象一下,在用户访问的每一页上,您都会传递一个?user_id=XYZ123,那么您将实现一个非常相似的服务器标识。它有明显的缺点:

    如果您复制/粘贴 URL,您将泄露您的 session_id 因为 1 次会话 high-jack 的技术含量更低

用户为何禁用 Cookie? 用户倾向于混合使用第一方和第三方 cookie,但它们来自不同的品种。

第一方 cookie 通常没问题。当您访问 Facebook 时,预计 Facebook 会保留一个 cookie 来存储您与服务器的交互。

没想到的是,在 Facebook 和 eBay 上都添加的广告公司会取回你的 cookie 并检查,啊,所以这个人在 eBay 上寻找 xyz,所以现在他在 Facebook 我要展示他起来 abc 让他买等等等等......

【讨论】:

【参考方案3】:

我认为你应该阅读会话参考手册http://www.php.net/manual/en/session.idpassing.php

简而言之,如果你的服务器找不到 session_id,他就无法恢复 session。但是您可以使用其他方式来存储会话值。或者您可以根据用户的客户端环境参数生成 session_od。

【讨论】:

以上是关于如果 cookie 被禁用会怎样?的主要内容,如果未能解决你的问题,请参考以下文章

iOS7 无法访问 HTML5 localStorage,如果 Cookies 被禁用

Rails 4.2 / Devise - 如果禁用cookie,则向用户显示特定消息

如何检测服务器端是否禁用cookie

电脑里怎样禁用 Guest 帐户?

如何检测服务器端cookie是不是被禁用

IE浏览器的Cookies被禁用,如何设置允许使用