我试图在head.inc文件中包含一些代码,该代码将检查该页面是否以用户的位置语言显示,如果可以,它将重定向到该页面。显然,这对于UX来说不是很好,但是but,我的客户很热衷。
我需要解决的唯一问题是,如果用户已经被重定向,则不要在每个页面上都这样做...存储用户已被重定向的事实,并且在会话结束之前不要再次执行此操作。这样的事情。
我已经在下面编写了代码,但是a)我不确定这是执行此操作的最佳方法,并且b)它似乎陷入了重定向循环中(我认为第二次会话检查可以避免这种情况)。
我正在使用ipapi.com检查用户的位置。我还使用了ProcessWire的'$ session',它实际上与PHP会话相同。
if (!$session->get("lucentLightingRegion")) {
$session->set("lucentLightingSessionRedirected", "false");
if ($page->ipapiGetUserLocation()['continent_code'] === 'NA') {
$session->set("lucentLightingRegion", "NA");
if ($page->viewable('na')) {
$url = $page->localUrl('na');
$session->redirect($url);
}
} else {
$session->set("lucentLightingRegion", "INT");
if ($page->viewable('default')) {
$url = $page->localUrl('default');
$session->redirect($url);
}
}
} else {
$sessionRegion = $session->get("lucentLightingRegion");
bd($sessionRegion);
if ($page->viewable($sessionRegion) && $session->get("lucentLightingSessionRedirected") == "false") {
$url = $page->localUrl($sessionRegion);
$session->redirect($url);
$session->set("lucentLightingSessionRedirected", "true");
}
}
$session->redirect($url);
之前致电$session->set("lucentLightingSessionRedirected", "true");
似乎是您的问题。
查看$session->redirect()
它的源代码将执行:
header("Location: $url");
exit(0);
从来没有设置为$session->set("lucentLightingSessionRedirected", "true");
,这阻止了调用,从而导致重定向循环。lucentLightingSessionRedirected
"true"
要解决此问题,您应该能够更改操作顺序。
if ($page->viewable($sessionRegion) && $session->get("lucentLightingSessionRedirected") == "false") {
$session->set("lucentLightingSessionRedirected", "true");
$url = $page->localUrl($sessionRegion);
$session->redirect($url);
}
请记住,这Wire::__call()
是用来发布的Session::__redirect()
但是,看来会话和区域重定向也存在逻辑缺陷,这可能导致不希望的状态。由于$page->localUrl()
使用的是小写值,但使用lucentLightingRegion
大写,因此我不知道您的应用程序如何处理它们。此外,是INT
加载default
页面的默认区域,当重定向到时,该区域可能无法正常工作$sessionRegion = 'INT'
。我需要在这个预期如何工作的详细信息,如果有确实的状态不一样NA
,na
,INT
和default
什么是应该当没有指定的值是一个发生viewable()
网页时lucentLightingRegion
设置。目前,如果lucentLightingRegion
设置了if ,而notviewable()
或lucentLightingSessionRedirected
is "true"
,则将不满足任何条件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句