【问题标题】:PHP cookies, add more values to attributePHP cookie,为属性添加更多值
【发布时间】:2014-05-17 23:09:23
【问题描述】:

我正在尝试实现以下功能。当有人阅读一篇文章时,我想添加一个存储文章 id 的 cookie,以便我可以在另一个页面中使用它。我的问题是,如果用户看到另一篇文章,那么 cookie 会被重写,所以旧的 id 会被删除。我想在 cookie 中保留所见文章的所有 id。

设置 cookie

<?php
// Check if cookie exists
if( isset($_COOKIE["read"]) ) {
    $array = unserialize($_COOKIE['read']);

    // Iterate array
    found = False;
    foreach ($array as $i) {
        // Check if doc id already in cookie
        if ($array[$i] == $id) {
            found = True;
        }   
    }
    if (!found) {
        array_push($array, $id);
        setcookie("read", serialize($array), time()+3600);
    }
}

// If cookie does NOT exists
else {
    $array = array();
    array_push($array, $id);
    setcookie("read", serialize($array), time()+3600);
}
?>

读取cookie表明文章已被阅读

<?php

while($row = mysqli_fetch_array($result)){
    $id = $row['id'];

    if( isset($_COOKIE["read"]) ) {
        $array = unserialize($_COOKIE['read']);
            // Iterate array
            for ($i = 0; $i < count($array); ++$i) {
                if ($array[$i] == $id) {
                    $read = True;
                }
                else {
                    $read = False;
                }
            }
    }
    else {
        $read = False;
    }

    print "<p>Document ".$row['id']." Title: <b>".$row['title']."</b>";
    if ($read == True) {
        print("*");
    }
    print " <a href=\"detail.php?id=".$row['id']."\">More Info</a></p>";
}

?>

此代码有效,但如前所述,它会覆盖之前的文章 ID。我想我必须使用一个数组。但我不知道如何继续增加价值。

更新:我尝试serialize,但仍然没有结果。我正在尝试查看 id 是否在 unserialized 数组内。

【问题讨论】:

  • 检查您的 setcookie 调用是否失败,即if(!setcookie(...)) { log error }
  • 我可以看到它设置了cookie。问题是当我试图查看我从 cookie 获取的数组中是否存在 id 时。
  • 这个数据只用在服务器端吗?

标签: php cookies


【解决方案1】:

你想要Arrays in cookies PHP

序列化数据:

setcookie('cookie', serialize($idS));

然后反序列化数据:

$idS= unserialize($_COOKIE['cookie']);

【讨论】:

  • 我尝试使用序列化,但仍然无法使其工作。我想我无法在数组中搜索。你能看看更新的代码吗?谢谢!
【解决方案2】:

尝试在 cookie 名称的开头添加一个 datetime() 字符串。这样旧的就不会被覆盖。比如:

$date_snippet = date('Y-m-d H:i:s'); 
setcookie("{$date_snippet}read", serialize($array), time()+3600);

【讨论】:

    猜你喜欢
    • 2018-05-03
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多