如果禁用了Cookie会发生什么?

12

这里有一个基本的问题。在PHP中,如果用户的浏览器禁用了cookies,那么您无法同时使用服务器cookies ($_SESSION) 和客户端cookies ($_COOKIE, setcookie),或者只有后者被禁用了?

基本上你不能让用户登录或进行任何需要会话的操作,对吧?

此外,在什么情况下会有人想要禁用cookies呢?

谢谢!

3个回答

15

没错,这是真的。会话和普通cookie都是普通的cookie。如果用户不接受cookie,则无法使用其启用的任何功能。这意味着对于该用户来说,几乎整个互联网都会崩溃,这就是为什么在如今几乎没有完全禁用cookie的人的原因。

PHP有一个内置机制称为透明会话ID,它会自动重新编写所有链接,以在查询参数中包含会话ID。我不建议使用它,因为URL中的会话ID会开启一整个新的难题。

为了用户友好性,我建议您测试用户是否已启用cookie(设置cookie,重定向到下一个页面,并在URL中使用标志表明应该设置cookie,查看是否收到任何cookie),如果没有,请友好地建议用户启用它们。


随机想法...您认为将trans-sid与SSL结合使用是否可行?(因为查询参数是ssl加密的)? - Ben
@Ben 问题不是缺少 SSL,而是用户不会理解 URL 包含一个会话并将包含 trans-sid 的 URL 发送给朋友。单击链接将登录该朋友作为用户。 - Joachim Isaksson
@Ben 不是关于可见性的问题。如果有人能够拦截任何一个,Cookie和URL一样可见。问题在于共享URL,在浏览器历史记录中等等。 - deceze
@both。是的,非常好的观点,我完全忽略了那个方面。 - Ben
我完全禁用了cookie。我会在逐个站点的基础上启用它们,这还不错。 - Boann
显示剩余2条评论

2
您可以通过$_GET跟踪用户。
想象一下,在用户访问的每个页面上,您都会传递一个?user_id=XYZ123,那么您将实现非常相似的服务器识别。它有明显的缺点:
1. 如果您复制/粘贴URL,则会泄漏您的session_id。 2. 因为有1个session高杠杆,所以即使不是技术专家也容易被攻击。 为什么用户禁用cookies?
用户倾向于混合使用第一方和第三方cookie,但它们来自不同的来源。
第一方cookie通常是可以接受的。当您访问Facebook时,预计Facebook会保留一个cookie以存储您与服务器的交互。
但是,广告公司在Facebook和eBay上都有广告,却能获取您的cookie并检查,啊,这个人正在eBay上寻找xyz,所以现在他在Facebook上,我要向他展示abc以促使他购买等等... 这是不被期望的。

1

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

简而言之,如果您的服务器找不到session_id,则无法恢复会话。但是您可以使用替代方法来存储会话值。或者您可以基于用户的客户端环境参数生成session_id。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接