簡體   English   中英

PHP - 設置 cookie 和重定向

[英]PHP - Set cookie and redirect

我正在嘗試設置 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>

為什么第一個示例有效,而其他示例無效?

使用包含而不是重定向

這也為瀏覽器節省了往返 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");

就像它應該的那樣工作:

在此處輸入圖片說明

我也遇到了這種奇怪的情況,但是使用了 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 由於某種原因失敗......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM