删除匿名会话cookie php

时间:2016-03-25 15:38:04

标签: php varnish

我正在使用

XPath to Error Source: //wsdl:definitions[@targetNamespace='urn:vim25']/wsdl:portType[@name='VimPortType']

在PHP脚本的开头。我最近安装了清漆来做一些缓存,所以当用户匿名(或没有登录)时,我希望PHPSESSID消失。

如果用户没有登录,我想在我的PHP脚本中设置一个自定义标头(在响应头中),并缓存这些页面。但我不认为这会起作用,因为Cookie在请求标题中,如果我理解正确,那就是为什么清漆不是缓存。

如何解决此问题?删除匿名用户的请求cookie似乎是理想的。

1 个答案:

答案 0 :(得分:0)

这里涉及到一些因素,所以请原谅我缺乏简洁性以支持完整性。首先,session_destroy()仅删除服务器端会话数据,而不删除PHPSESSID cookie(或设置会话cookie的现有响应头请求)。如果客户端上已经存在任何cookie,则还需要调用setcookie()命令以覆盖PHPSESSID cookie,其中另一个已经过去的过期日期,这将导致浏览器在http请求处理后删除cookie虽然它不能帮助PHPSESSID cookie仍然存在于当前请求中,但停止了Varnish。如果你可以用条件来追逐每个session_start()命令来销毁它,并在它到达客户端之前从响应中删除set-cookie头,那么这可能有效,但它是一个非常不稳定的创可贴。它也可以覆盖PHP的会话处理,以便整个session_start进程通过条件,但这也是一个粗略的补丁(更多信息:http://php.net/manual/en/class.sessionhandler.php

Varnish确实有一些有关选择性绕过某些Cookie的文档(主要用于Google Analytics Cookie): https://www.varnish-cache.org/docs/3.0/tutorial/cookies.html 问题在于,从Varnish的角度来看,它无法告诉填充的PHP会话与空的会话,所以即使是登录的人也会从Varnish提供缓存页面。我建议,让Varnish忽略PHPSESSID cookie,但在正确登录时设置一个额外的cookie,Varnish没有设置为绕过,以便这些请求将被传递到后端。