如果设置了cookie,则重定向,如果没有,则保留在当前页面上

时间:2015-01-28 17:53:49

标签: php redirect cookies

我缺乏经验,并试图摸索这个......对不起......

当访问者访问index.php时,我需要一个cookie集来表明他们以前曾经去过那里。然后当他们再次返回index.php时,我希望他们重定向到indexreturn.php。可能有一种更简单的方法,但基本上我需要返回访问者来获得不同的页面。

使用我的代码,重定向每次都会发生,但是当我进入浏览器设置删除特定的cookie时,我不知道是否在那里?再次,抱歉,如果这是一个愚蠢的问题。

这就是我所拥有的,在我的代码的最顶层:

<?php
if (!isset($_COOKIE['return']))
{
    header('Location: 

http://www.bloodsugarsecretsexposed.com/special/vsl/indexreturn.php');
    exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
$cookie_name = "return";
setcookie('return', time() + (86400 * 30), "/"); // 86400 = 1 day
?>

谢谢!

2 个答案:

答案 0 :(得分:0)

在您的初始if语句中,您要求&#34;如果未设置&#34; via!isset,因此每次都会重定向用户,而不会设置cookie。尝试删除感叹号......所以&#34;如果是isset,则重定向&#34;

答案 1 :(得分:0)

知道这是一个古老的问题,但看起来很实用,就像今天在教室里问的那样。

您的代码存在一些问题。

1)如@dmayo所指出的,您应该删除! isset,请勿将“ return”用作您的Cookie名称。 Return由PHP使用/保留,并可能触发错误。

2)您的setcookie字符串不正确,将按以下方式工作:

setcookie('doreturn', 'value', time() + (86400 * 30), "/");  // 86400 = 1 day

我测试过的完整代码(在PHP 7.2中)并且有效:

<?php
if (isset($_COOKIE['doreturn']))
{
    header('Location: index-return.php');
    exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
$cookie_name = "doreturn";
setcookie('doreturn', 'value', time() + (86400 * 30), "/");  // 86400 = 1 day
?>

或者就像@dmayo所指出的那样,可以这样写并且实际上更简洁:

<?php
if (isset($_COOKIE['doreturn']))
{
    header('Location: index-return.php');
    exit;
}
$cookie_name = "doreturn";
setcookie('doreturn', 'value', time() + (86400 * 30), "/");  // 86400 = 1 day
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<p>Cookie has been set, reload page to test...</p>

也许这会帮助其他人:)