2012-02-12 27 views
0

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

场景:

  1. 用户来到我的网站(我能得到我想要的任何数据);
  2. 用户离开页面;
  3. 经过一段时间后,来自另一台服务器的回拨将附带用户标识。此时,我需要使用户会话和cookie无效。

随着会议,这是简单的:

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

如何实现与饼干一样的吗?

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

简单的解决方案是将PHP-SDK正在将关于用户的信息从cookie存储到会话中的位,但转到包文件通常是一个坏主意。

+1

你是什么意思,“从另一台服务器的回调带有用户ID”? – Gumbo 2012-02-12 08:47:20

+0

您并不是“使cookie无效”,而是使cookie的数据无限延伸到与请求一起使用的权限。一,你怎么知道它来自不同的服务器?二,如果你可以确定一个请求是不合法的,那么无论该cookie的数据在你的服务器上引用了什么,以便允许它代表某个用户执行操作,也就是说,无论会话被指示,还是其他任何内容。但是,Cookie只是该数据的传输方式。 – 2012-02-12 08:51:15

+0

@JaredFarrish该请求只能从Facebook服务器接受。问题是Facebook SDK使用cookie来获取有关用户的一些数据(用户ID,[..])。现在,系统设计逻辑是这样的:如果FB PHP-SDK告诉我存在当前的用户ID,这意味着该用户被认证 - >继续检查用户是否在DB中。如果没有,请获取有关用户的信息。这是抛出异常的地方,因为实际上应用程序不再有权访问这些信息。所以我需要想出一种方法来删除PHP-SDK用来存储这些信息的cookie。 – Gajus 2012-02-12 08:58:12

回答

3

编辑

你的其他意见建议你不是真的知道什么饼干字面上,所以我提前道歉,如果你已经明白我做一下解释。

虽然我怀疑你需要回答或解决您的实际关注一些具体的Facebook的帮助,我想指出什么饼干居然是:

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's answer中描述了另一种方法。

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


你不是“无效饼干”这么多无效该cookie的数据扩展不管是谁在请求一起使用它的权限。

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

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

如果您要提供某些具体内容,请提供更多信息。但基本上,您似乎只需要有一种方法可以忽略包含您认定为无效或真实的数据或提供不正当访问(对冒名顶替者)的数据的Cookie。

1

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

我会去这样理解:

商店这饼干你设置一个用户的地方(DB,Redis的,等等)。这样你将知道哪些cookies用户拥有。然后,当请求无效时,将存储中该用户的Cookie标记为已删除(或类似的内容)。然后每次用户请求您的页面时,请检查您的存储中是否有任何已删除的Cookie。如果他已经摧毁了他的会话并且使他的cookie无效(例如设置它们)。

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

这没有意义。在使用它之前,系统上必须有某种参考ID来批准cookie服务器端。 – Gajus 2012-02-12 09:01:41

+1

@Guy - 饼干本质上不具备参考ID。它们实际上只是用来传输(在大多数情况下)作为客户端和服务器之间头部的一部分的短片段数据。 – 2012-02-12 09:04:55

相关问题