【问题标题】:Update a cookie with a new one when visiting different pages访问不同页面时用新的 cookie 更新
【发布时间】:2019-01-31 04:17:27
【问题描述】:

我的网站有多个位置,每个位置都有自己的一组信息。当用户访问公司主页时,不会显示位置信息。当用户然后转到位置页面时,我设置了一个 cookie。

        $location_address = get_field('location_address','options');
        $location_city = get_field('location_city','options');
        $location_state = get_field('location_state','options');
        $location_zip_code = get_field('location_zip_code','options');
        $location_phone_number = get_field('location_phone_number','options');

        // cookie will expire when the browser close
        setcookie("locationAddress",$location_address);
        setcookie("locationCity",$location_city);
        setcookie("locationState",$location_state);
        setcookie("locationZipcode",$location_zip_code);
        setcookie("locationPhone",$location_phone_number);

cookie 在 firebug 控制台中显示我的位置信息。但是,发生的事情是当我去另一个位置时,它会同时抓取两组 cookie。我需要它来用新的 cookie 替换之前设置的 cookie。

这也是我输出 cookie 的代码,它似乎也被破坏了:

<div class="top_contact">
                <p><?php if(!isset($_COOKIE[$location_address])) { echo "" . $location_address . "";} ?>, <?php if(!isset($_COOKIE[$location_city])) { echo "" . $location_city . "";} ?> <?php if(!isset($_COOKIE[$location_state])) { echo "" . $location_state . "";} ?> <?php if(!isset($_COOKIE[$location_zip_code])) { echo "" . $location_zip_code . "";} ?> | <span class="top_phone"><?php if(!isset($_COOKIE[$location_phone_number])) { echo "" . $location_phone_number . "";} ?></span> </p>

            </div>

【问题讨论】:

  • 多个地点?你是什​​么意思?多个子域?你能解释一下吗?
  • 是的,我正在使用 wordpress 多站点作为位置页面。所以我有一个公司主站点,然后是子文件夹中的多个站点。例如,您访问 domain.com,然后访问 domain.com/los-angeles。当您返回 domain.com 时,地址和电话号码将跟随您。然后,如果我先访问 domain.com/las-vegas,然后再返回 domain.com,则洛杉矶信息将被替换为 las-vegas 信息。有意义吗?

标签: php cookies session-cookies setcookie


【解决方案1】:

您应该在 setcookie 中设置“路径”参数。

setcookie("locationAddress",$location_address, 0, "/");
setcookie("locationCity",$location_city, 0, "/");
setcookie("locationState",$location_state, 0, "/");
setcookie("locationZipcode",$location_zip_code, 0, "/");
setcookie("locationPhone",$location_phone_number, 0, "/");

【讨论】:

    【解决方案2】:

    如果我是你,我可能会尝试设置 cookie 的路径。

    setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
    

    另外,我在您的代码中发现了几个逗号,并修复了意大利面条代码。

     <?php 
        echo '<div class="top_contact"><p>';
    
        if(!isset($_COOKIE[$location_address])) 
           { 
              echo $location_address;
           } 
        if(!isset($_COOKIE[$location_city])) 
           { 
              echo $location_city;
           }
        if(!isset($_COOKIE[$location_state]))
           { 
              echo $location_state;
           } 
        if(!isset($_COOKIE[$location_zip_code])) 
           { 
              echo $location_zip_code;
           } 
    
        echo '<span class="top_phone">';
    
        if(!isset($_COOKIE[$location_phone_number]))
           { 
              echo $location_phone_number;
           }
        echo '</span> </p> </div>';
    ?>
    

    【讨论】:

    • 使用此方法不会将任何值输出到我的代码中。我看到了 p 和跨度,但值是空白的
    • 另外,因为我在公司主页上使用该代码,所以从位置页面设置的 cookie 会立即在公司页面上被覆盖。
    猜你喜欢
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多