Php 重定向如果设置了cookie,则保持在当前页面上(如果未设置)

Php 重定向如果设置了cookie,则保持在当前页面上(如果未设置),php,redirect,cookies,Php,Redirect,Cookies,我没有经验,正试图摸索通过这个。。。对不起 当访问者访问index.php时,我需要一个cookie集来显示他们以前去过那里。然后,当它们再次返回index.php时,我希望它们重定向到indexreturn.php。可能有一个更简单的方法来做到这一点,但基本上我需要回访者得到一个不同的页面 使用我的代码,重定向每次都会发生,但是当我进入浏览器设置删除特定的cookie时,我看不出是否存在?再一次,如果这是一个愚蠢的问题,我很抱歉 以下是我的代码最顶层的内容: <?php if (!iss

我没有经验,正试图摸索通过这个。。。对不起

当访问者访问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
?>


谢谢

在您最初的if语句中,您是通过以下方式询问“if not set”!isset,因此每次都会重定向用户,而不会获得cookie集。试着去掉感叹号……所以“如果设置了,那么重定向”

知道这是一个老问题,但似乎非常有用,因为它是今天在教室里提出的

您的代码存在一些问题

1) 正如@dmayo所指出的,您应该删除!设置并不要将“return”用作cookie名称。Return由PHP使用/保留,可能会触发错误

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

setcookie('doreturn', 'value', time() + (86400 * 30), "/");  // 86400 = 1 day
我测试的整个代码(在PHP7.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>

Cookie已设置,请重新加载要测试的页面


也许这会帮助其他人:)

谢谢!这就解决了为什么即使在没有设置cookie的情况下重定向仍然有效的问题。现在重定向没有发生,但是cookie仍然没有设置。。。。知道为什么吗?在php(和许多语言)中,“return”是一个保留字。不确定使用它作为字符串是否会产生这种效果。尝试使用其他cookie名称。在任何输出进入浏览器(甚至空白)之前,必须设置cookie。因此,将setcookie放在cookie的isset测试的右括号后面(或者更好的是,让它成为if-then语句。因此…首先测试cookie是否已设置,如果为true,则重定向,否则,设置cookie。应该这样做。唉…它仍然不起作用。我更改了cookie的名称,甚至取出了整个重定目标部分,只是尝试成功设置cookie。看起来不应该如此硬:(当您设置cookie时,它在设置的页面/重新加载页面上不可用。请确保再次重新加载/刷新页面以查看cookie是否已设置。