我正在尝试实现以下功能。当有人阅读文章时,我想添加一个存储文章ID的cookie,以便我可以在另一个页面中使用它。我的问题是,如果用户看到另一篇文章,则会重写cookie,以便删除旧的ID。我想在cookie中保留所见文章的所有内容。
设置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
数组中。
答案 0 :(得分:1)
序列化数据:
setcookie('cookie', serialize($idS));
然后反序列化数据:
$idS= unserialize($_COOKIE['cookie']);
答案 1 :(得分:0)
尝试将datetime()字符串添加到cookie名称的开头。那样老的人不会被覆盖。类似的东西:
$date_snippet = date('Y-m-d H:i:s');
setcookie("{$date_snippet}read", serialize($array), time()+3600);