【问题标题】:Redirect if a cookie is set, stay on current page if not如果设置了 cookie,则重定向,如果没有,则停留在当前页面
【发布时间】:2015-03-27 18:07:45
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: php redirect cookies


    【解决方案1】:

    在您最初的 if 语句中,您通过 !isset 询问“如果未设置”,因此用户每次都会被重定向,而不会设置 cookie。尝试删除感叹号...所以“如果 isset 然后重定向”

    【讨论】:

    • 谢谢!这解决了为什么即使没有设置 cookie 也可以进行重定向的问题。现在重定向没有发生,但 cookie 仍然没有设置....知道为什么吗?
    • “return”这个词是 php(和许多语言)中的保留字。不确定将其用作字符串是否会产生影响。尝试使用不同的 cookie 名称。
    • 你必须在任何输出进入浏览器之前设置一个cookie(甚至是空白)。因此,将 setcookie 紧跟在 cookie 的 isset 测试的右花括号之后(或者更好的是,将其设为 if-then 语句。所以...首先测试 cookie 是否已设置,如果为真,则重定向,否则,设置cookie。应该这样做。
    • 啊...它仍然无法正常工作。我更改了 cookie 的名称,甚至取出了整个重定向部分,只是试图成功设置 cookie。这似乎不应该那么难:(
    • 当您设置 cookie 时,它​​在设置的同一页面/重新加载时不可用。确保再次重新加载/刷新页面以查看他的 cookie 已设置。
    【解决方案2】:

    知道这是个老问题,但今天在课堂上被问到这个问题似乎很有用。

    您的代码存在一些问题。

    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>
    

    也许这会对其他人有所帮助:)

    【讨论】:

    • 由于某种原因,使用此方法时出现错误。 “此页面未正确重定向” .. if (isset($_COOKIE['donate-splash'])) { header('Location: /index-donate.php'); exit; } else { $cookie_name = "donate-splash"; setcookie('donate-splash', 'value', time() + (86400 * 30), "/"); // 86400 = 1 day }
    • 基本上尝试检查是否设置了cookie。如果没有,那么我需要重定向到“index-donate.php”页面并将适当的 cookie 设置为 1 天。我错过了什么??
    • 我建议打开您自己的问题。任何人都无法帮助“出错”。有点像告诉医生您的身体受伤了:)提供您正在使用的代码并详细说明您遇到的“错误”。
    猜你喜欢
    • 2011-11-14
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多