Php 缓存验证-浏览器不正确地验证缓存中的Cookie?
我有以下情况:Php 缓存验证-浏览器不正确地验证缓存中的Cookie?,php,validation,caching,browser,cookies,Php,Validation,Caching,Browser,Cookies,我有以下情况: 用户向显示表单的页面A发出请求(服务器存储此页面的缓存) 用户将表单提交给用于表单提交的控制器 控制器在用户提交的数据中查找错误,设置cookie错误详细说明这些错误,并将用户重定向回页面a 页面A显示原始内容和错误(服务器存储此页面的缓存) 页面A删除错误cookie 这是可行的,但前提是我不使用系统中的缓存来访问页面A 问题是,在删除cookie后,浏览器向我的服务器发出一个没有cookie的请求,并得到一个304 Not Modified错误,因此,浏览器仍然显示有错误
- 用户向显示表单的页面A发出请求(服务器存储此页面的缓存)
- 用户将表单提交给用于表单提交的控制器
- 控制器在用户提交的数据中查找错误,设置cookie错误详细说明这些错误,并将用户重定向回页面a
- 页面A显示原始内容和错误(服务器存储此页面的缓存)
- 页面A删除错误cookie
在不为每个请求设置一些GET变量的情况下,是否有一种解决方法?另一种方法是告诉服务器永远不要缓存设置了此类错误状态的页面,但这将是一种攻击。缓存控制:公共可能不是您想要的。Public本质上说,您使用的是静态的、全局可访问的数据。它不会因每个用户而改变。它是全局缓存,因为您声称数据是全局的 一旦您开始更改每个用户,缓存就会违反其假设。”“私人”更像是你想要的
然而,这意味着您得到的优秀中间人缓存更少。通过重新验证或适当使用不同的标题,您可能会找到一些折衷办法。显然,解决方案是将此作为响应标题:
Vary: Cookie
这将在缓存引擎中考虑cookie
编辑:
不过也有一个问题:Chrome、Internet Explorer和Firefox都能正常工作,但Safari和Opera在存储和验证缓存时都会忽略“Vary”标题。客户端会话(也称cookies)可能不足以满足此场景。。。
建议改为使用服务器端会话。即使可以使用不同的头文件-使用$\u会话,您将处于保存端。但这不起作用,Public和Private之间的唯一区别是Private表示只有浏览器可以缓存,而使用Public时,每个人都可以缓存。我将其更改为Private,其行为与此相同(因为浏览器在发出请求时不请求缓存)。我在最初的问题中将它改为private只是为了确定。这是不正确的,服务器端会话仍然需要cookie才能工作,因此它有完全相同数量的问题。当然,在服务器端提供变量更方便,而不仅仅是在客户端的cookie中。例如:许多WordPress博客遭到黑客攻击,因为人们从inet咖啡馆(或其他公共计算机)登录,并使其客户端会话存储被劫持,因此这也是一个安全问题。根据这个问题,您的答案肯定是正确的-我只是想对这个场景提出问题。是的,使用cookie仅用于识别,并在服务器端的页面之间传递错误消息(使用$\会话)。最佳做法是分析具体需求,而不是在客户端存储任何超出要求的内容。这不能一概而论,因为它取决于应用程序以及它的可移植性。在我的WP示例中,它是这样实现的,以便在任何垃圾主机上运行,即使没有加载会话模块。