如果 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 被禁用