PHP - 设置cookie和重定向

时间:2015-04-15 02:10:07

标签: php cookies

我正在尝试设置Cookie并重定向。使用Debian GNU / Linux 6.0(64位)和PHP 5.3.3-7 + squeeze19与Suhosin-Patch(cli)(内置:2014年2月17日10:10:23)和Apache / 2.2.16(Debian)。

出于某种原因,这有效:

<?php
    $cookie_name = $_GET['a'];
    $cookie_value = $_GET['b'];
    setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
?>

但这不是:

<?php
    $cookie_name = $_GET['a'];
    $cookie_value = $_GET['b'];
    setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
    header("Location: http://www.example.com");
    exit;
?>

即使在几次页面加载后也是如此。我已经尝试将错误报告添加到我的代码顶部,但是当我加载页面或Apache日志时没有看到任何错误(/var/log/apache2/error.log):

    error_reporting(E_ALL);ini_set('display_errors','1');

出于某种原因,每当我重定向时,即使使用如下的javascript,也不会添加cookie。

<?php
    $cookie_name = $_GET['a'];
    $cookie_value = $_GET['b'];
    setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
?>
<!DOCTYPE HTML>
<html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="refresh" content="1;url=http://www.example.com">
        <script type="text/javascript">
            window.location.href = "http://www.example.com"
        </script>
        <title>Page Redirection</title>
    </head>
    <body>
        If you are not redirected, follow <a href='http://www.example.com'>this link</a>!
    </body>
</html>

为什么第一个例子有效而不是其他例子?

2 个答案:

答案 0 :(得分:0)

使用包含而不是重定向

这也为浏览器保存往返HTTP请求

<?php
    $cookie_name = $_GET['a'];
    $cookie_value = $_GET['b'];
    setcookie($_GET['a'], $_GET['b'], time() + (86400 * 30), "/"); // 86400 = 1 day
    include('/home/user/public_html/index.html');
    exit;
?>

虽然我更喜欢包含重定向标头,但您的Cookie应该可行。我已经过测试,它的工作原理就像它应该的那样。

在我的测试中,我重定向到另一个域。 cookie在PHP脚本所在的域中设置。

setcookie('test', 'test', time() + (86400 * 30), "/");
header("Location: http://www.intel.com");

就像它应该的那样工作:

enter image description here

答案 1 :(得分:0)

我也得到了这种奇怪但js重定向。在xp上使用chrome浏览器进行测试。

我解决它的方法是使用document.cookie =

进行注入js的cookie设置
                ?>
                <script type="text/javascript">
                    function setCookie(cname, cvalue, exdays) {
                        var d = new Date();
                        d.setTime(d.getTime() + (exdays*24*60*60*1000));
                        var expires = "expires="+d.toUTCString();
                        document.cookie = cname + "=" + cvalue + "; " + expires;
                    }
                    setCookie("foo","<?php echo $bar; ?>",30);
                    window.location = "<?php echo $destination_page; ?>.php";
                </script>
                <?php
然后问题就消失了。

感觉重定向导致php setcookie因某种原因失败了......