【发布时间】:2017-03-09 12:22:40
【问题描述】:
我有几个视图,如果用户未登录或处于其他状态(结帐视图中的购物车不为空),我会将他重定向到其他地方,我为此编写了一个方法,但谷歌浏览器缓存了我的重定向。
示例:如果用户尝试结帐并因为购物车是空的而被重定向,那么下一次,即使他的购物车已满,他也会再次被重定向。只有在手动进入 Chrome 的设置并清除缓存和浏览历史记录后才能解决。
我的方法:
public static function redirect($url, $statusCode = 302, $cacheHeader = true)
{
if( $cacheHeader === false ) {
header("Cache-Control: no-cache, must-revalidate");
}
header('Location: ' . $url, true, $statusCode);
exit();
}
调用方法:
EkerbaseUtilities::redirect(Ekerbase::getRoot() . '#showcart', 307, false);
我试过307、303等状态,结果都一样。您还可以看到,我尝试设置 no-cache 标头,但也没有执行任何操作。
我尝试的其他方法是在 url 中设置 ?unique()=1,用于始终更改但仍得到相同结果的参数。
请注意,JS 重定向是不可能的,因为 UX 是该网站的关键。
有什么线索吗? 谢谢,
【问题讨论】:
-
“我尝试的其他方法是在 url 中设置 ?unique()=1,用于始终更改但仍然得到相同结果的参数。” – 它为浏览器之前甚至没有请求过的 URL 获取缓存重定向是相当不可能的……您在哪个 URL 上尝试过 - 用户在重定向之前发送到的原始 URL?
-
“如果用户尝试结账并因为购物车是空的而被重定向” - 首先为什么要这样做?让他们去结账页面,并告诉他们没有东西可以结账,因为他们的购物车是空的。如果您想进一步指导他们现在应该/可以做什么,请提供其他链接,例如“继续购物”……
标签: php google-chrome browser-cache