有没有办法使用户的cookie无效?

时间:2012-02-12 08:39:43

标签: php facebook cookies session-cookies

有没有办法让用户的cookie无效?

情景:

  1. 用户访问我的网站(我可以获得我想要的任何数据);
  2. 用户离开页面;
  3. 一段时间后,来自其他服务器的回调附带用户ID。此时,我需要使用户会话和cookie无效。
  4. 通过会话,这很简单:

    session_id($user['session_id']);
    session_destroy();
    

    如何使用cookies实现相同的目标?

    请参阅此帖子下的评论,了解更多详情以及它与Facebook的关系。

    简单的解决方案是将PHP-SDK存储有关用户信息的位从cookie替换为会话,但转到包文件总是一个坏主意。

3 个答案:

答案 0 :(得分:3)

修改

你的其他评论表明你并不真正意识到饼干的字面意思,所以如果你已经明白我要解释的内容,我会提前道歉。

虽然我怀疑你需要一些特定于Facebook的帮助来回答或解决你的实际问题,但我想指出一个cookie究竟是什么:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT

http://en.wikipedia.org/wiki/HTTP_cookie#Setting_a_cookie

这是在客户端和服务器(请求者/响应者)之间传输cookie的方式。您可以使用Firebug或Chrome控制台中的“网络”标签自行查看请求的来源以及来回发送的数据。它们本质上不是“系统地”记录的,本身不是有限的“事物”,而只是包含在请求和响应的数据包中的标题的一部分,类似于电子邮件标题中的CC / BCC字段:伪 - 瞬间但描述性的。

要实现在使用之前验证Cookie的效果,您需要确定如何将参考ID附加到cookie,或者(或者)使用必须计算的代码检测特定cookie在请求中提交其他数据时出现。另一种方法在Jan's answer中描述。

但是,Cookie通常不会以这种方式处理。它们只是运输,意味着结束,填补了GET和POST之间的空白。


你不是“使cookie无效”,而是使cookie的数据扩展到与请求一起使用它的人的权限无效。

一,你怎么知道它来自不同的服务器?二,如果你可以确定一个请求是不合法的,那么你服务器上的cookie数据引用给它代表用户执行操作的权限需要被删除,即,指示的任何会话被终止/销毁,或者其他什么其他。

但是,cookie只是该数据的传输。您必须能够拦截,检测和阻止它为其提供的任何访问权限,以使其“无用”。

如果您询问具体信息,请提供更多信息。但基本上似乎所有你需要做的就是忽略包含你认为无效或真实的数据的cookie,或者提供不正当的访问(对于冒名顶替者)。

答案 1 :(得分:1)

您无法为未直接向您的服务器发出请求的用户设置(取消设置/无效)Cookie。你将不得不做更多的工作。

我会这样做:

存储您为某个用户设置的cookie(db,redis,等等)。通过这种方式,您将知道用户拥有哪些cookie。然后,当出现无效请求时,将存储中该用户的cookie标记为已删除(或类似内容)。然后每次用户请求您的页面检查他的存储中是否有任何已删除的cookie。如果他已经破坏了他的会话并使他的cookie无效(例如在过去设置它们)。

答案 2 :(得分:0)

Cookie存在于客户端,您无法在服务器端执行任何操作。 但是,如果“一段时间后”意味着cookie应在一段时间后过期,则应设置cookie设置的过期时间。您无需担心用户是否仍在他的页面上,因为如果他在一段时间后离开并再次访问,浏览器将为您处理。

例如,下面的代码显示了如何设置一个应该在1小时后过期的cookie。

$value = 'something from somewhere';

setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);  /* expire in 1 hour */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);