我在重定向到页面时遇到此问题,我有一个cookie“ EmailSubscriber”。因此这里的条件是,如果网站加载并找到该Cookie,则它将重定向到特定页面。
$rlink = get_option( "subscriber_redirect_link" );
if ( isset($_COOKIE["EmailSubscriber"]) ) {
wp_redirect( $rlink, 302 );
}
但是此代码在每次更改页面时都会重定向,因此我停留在重定向的页面上,那么如何才能做到这一点呢?这意味着当我打开浏览器并检测到Cookie“ EmailSubscriber”时,它将把我重定向到一个页面,然后当我离开该页面时,它将不再重定向我。
答案 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;
当您再次进入该站点时,它将不再重定向。