查找cookie并仅在php中重定向到页面一次

时间:2018-06-26 01:03:11

标签: javascript php wordpress cookies

我在重定向到页面时遇到此问题,我有一个cookie“ EmailSubscriber”。因此这里的条件是,如果网站加载并找到该Cookie,则它将重定向到特定页面。

$rlink = get_option( "subscriber_redirect_link" );

if ( isset($_COOKIE["EmailSubscriber"]) ) {
    wp_redirect( $rlink, 302 );
}

但是此代码在每次更改页面时都会重定向,因此我停留在重定向的页面上,那么如何才能做到这一点呢?这意味着当我打开浏览器并检测到Cookie“ EmailSubscriber”时,它将把我重定向到一个页面,然后当我离开该页面时,它将不再重定向我。

3 个答案:

答案 0 :(得分:0)

连续重定向的原因是在重定向之后,cookie仍然被设置,并且此代码再次运行。会话变量之类的Cookie在请求之间是持久的。

您需要在重定向之前取消设置cookie值,也不要获取重定向链接,除非您打算使用它。

if (isset($_COOKIE['EmailSubscriber'])) {
    unset($_COOKIE['EmailSubscriber']);
    $rlink = get_option('subscriber_redirect_link');
    wp_redirect($rlink, 302);
}

也就是说,使用cookie触发重定向是一个比较奇怪的设计选择,也许您应该改为使用get参数标记重定向,例如:

https://example.com/script.php?redirect=1

if (isset($_GET['redirect'])) {
    $rlink = get_option('subscriber_redirect_link');
    wp_redirect($rlink, 302);
}

或者使用会话变量,因为即使已经发送了标头,它也将起作用,这与使用cookie不同。由于客户端无法像Cookie一样更改会话中的值,因此也更安全。

if (isset($_SESSION['redirect'])) {
    unset($_SESSION['redirect']);
    $rlink = get_option('subscriber_redirect_link');
    wp_redirect($rlink, 302);      
}

答案 1 :(得分:0)

您可以结合使用cookie和会话

首先在header.php中启动会话(添加此会话),如果session_start()之前未声明,则添加会话

session_start();

然后将其添加到您要重定向的页面中

$rlink = get_option( "subscriber_redirect_link" );

$_SESSION['previous'] = basename($_SERVER['PHP_SELF']);

//checking both values cookie and session
if ( isset($_COOKIE["EmailSubscriber"]) && isset($_SESSION["previous"])) {
    wp_redirect( $rlink, 302 ); //redirect if both set
}

然后将其添加到footer.php

if (isset($_SESSION['previous'])) {
   if (basename($_SERVER['PHP_SELF']) != $_SESSION['previous']) {//this will compare your redirected page with the navigated page
        unset($_SESSION['previous']);//this will unset the session variable
   }
}

答案 2 :(得分:-1)

例如,将Cookie值设为TRUE或FALSE

TRUE-重定向链接已访问

FALSE-未访问重定向链接

并在重定向页面上更改cookie的值。

将代码修改为:

if ( isset($_COOKIE["EmailSubscriber"]) ) {
    if($_COOKIE["EmailSubscriber"] == FALSE) {
        wp_redirect( $rlink, 302 );
    }
}

然后在重定向页面上更改cookie值:

$_COOKIE["EmailSubscriber"] = TRUE;

当您再次进入该站点时,它将不再重定向。