【发布时间】: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 时。
-
这个数据只用在服务器端吗?