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



是否有方法使用户的cookie无效?

场景:

  1. 用户来到我的网站(我可以获得任何我想要的数据)
  2. 用户离开页面
  3. 一段时间后,来自另一台服务器的回调会附带用户ID。此时,我需要使用户会话和cookie无效

对于会话,这很简单:

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

如何用cookie实现同样的效果?

请查看此帖子下的评论,了解更多详细信息以及它与Facebook的关系

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

编辑

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

虽然我怀疑你需要一些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控制台中的Net选项卡,亲自查看如何发出请求以及来回发送哪些数据。它们本质上不是系统地"记录"的,本身也不是有限的"事物",而是请求和响应数据包中包含的报头的一部分,类似于电子邮件报头中的CC/BCC字段:伪瞬态但描述性。

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

不过,Cookie通常不会以这种方式处理。它们只是运输工具,意味着达到目的,填补GET和POST之间的空白。


与其说是"使cookie无效",不如说是使cookie数据扩展到与请求一起使用它的人的权限无效。

第一,你怎么知道它来自不同的服务器?第二,如果你可以确定一个请求是不合法的,那么无论cookie在你的服务器上引用了什么数据来允许它代表用户执行操作,都需要删除,即,无论指示的会话是结束/销毁的,或者其他什么。

不过,cookie只是数据的传输。你必须能够拦截、检测和阻止它为持有者提供的任何访问,使其变得"无用"。

如果你想问一些具体的问题,请提供更多信息。但从本质上讲,你所需要做的似乎就是忽略cookie,这些cookie包含你认定为无效或不真实的数据,或者提供了不正当的访问(给冒名顶替者)。

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

我会这样做:

将您为用户设置的cookie存储在某个位置(db、redis等)。这样我们就能知道用户拥有哪些cookie。然后,当收到无效请求时,将存储中该用户的cookie标记为已删除(或类似的内容)。然后,每当用户请求您的页面时,请检查他在您的存储中是否有任何已删除的cookie。如果他破坏了他的会话并使他的cookie失效(例如,在过去设置cookie)。

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);

最新更新