PHP重定向到基于页面版本的用户位置(IPAPI),并在会话中记住

画家约翰

我试图在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");
    }

}
将B.

$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'我需要在这个预期如何工作的详细信息,如果有确实的状态不一样NAnaINTdefault什么是应该当没有指定的值是一个发生viewable()网页时lucentLightingRegion设置。目前,如果lucentLightingRegion设置了if ,而notviewable()lucentLightingSessionRedirectedis "true",则将不满足任何条件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果已经在php mysql中登录用户,如何将用户重定向到配置文件页面

将用户重定向到Playstore中的“订阅”页面

Codeigniter登录系统,带有会话,如果密码正确,可将用户重定向到页面

当会话在Laravel中过期时,将用户重定向到登录页面

销毁php中的会话后未重定向到页面

当用户会话处于活动状态时使用Laravel 5.7中的Auth重定向到页面的方法

如何在PHP 7中从页面重定向到页面?

如何根据PHP中的URL参数重定向到页面?

php中的表单提交后未重定向到页面

重定向到OnPost中特定位置的Razor页面

PHP,如果会话开始,则重定向到其他页面

将用户重定向到引用页面

会话中的PHP。当用户错误地以表格形式输入其信息时,它不会重定向到登录页面

如何通过用户类型在php和mysql中重定向到不同的页面

使用参数从c#类重定向到xaml页面,并在xaml页面中捕获它们

将用户重定向到登录页面

如何基于下拉选择的值/文本重定向到PHP中的另一个页面?

如何基于PHP中的get url将用户重定向到其他页面?

基于用户角色的登录始终重定向到同一页面

标头位置PHP重定向到错误的页面

删除并重定向到PHP中的页面

当密码有效时,将用户重定向到基于用户名的页面

发生重定向时如何记住会话?

如何重定向到登录页面并在该页面中显示消息

根据 codeigniter 中的用户角色重定向到页面

创建一个页面以根据用户类型重定向到我的会话的不同页面,但只有第二个标头位置正在重定向

当令牌会话过期时将用户重定向到登录页面 - Laravel 5.8

如何防止用户重定向到 django 中的受限页面

在 PHP Wordpress 中将用户重定向到目标页面