0

当用户访问一个页面时,我有:

setcookie("firstvisit", time()+3600);

在我拥有的每个页面的标题中包含的函数文件中:

if(isset($_COOKIE['firstvisit'])) {
$run = mysql_query("UPDATE `table` SET `firstvisit` = 1 WHERE `id` = '".$_SESSION['uid']."'");
setcookie("firstvisit", time()-3600);

如果我这样做(并且有效),则意味着每次用户单击该页面时脚本都会运行。有没有其他方法可以做到这一点?

4

3 回答 3

0

您可以在设置之前检查 cookie 是否已设置。

if( !isset($_COOKIE['firstvisit']) ){ //if the cookie is not set
  //set your cookie 
} //skip otherwise
于 2013-09-13T01:22:27.120 回答
0

如果您不想每次都更新值。检查数据库中的值是否已经存在?

于 2013-09-13T01:22:49.703 回答
0

您的代码只会在第二次访问时将数据库中的firstvisit设置为 1。这是因为isset($_COOKIE['firstvisit'])必须评估为 true 才能运行查询,并且 cookie 仅在下一个请求中可用 -setcookie()不会添加到$_COOKIE数组中。

// assumes $_SESSION['uid'] is always set

if(!isset($_COOKIE['firstvisit'])) {
    setcookie('firstvisit', time()); //set a cookie containing the timestamp of when this user first visited the page
    $run = mysql_query("UPDATE `table` SET `firstvisit` = 1 WHERE `id` = '".$_SESSION['uid']."'");
}
else {
    //it's not their first visit because the cookie already exists
}

请注意,此逻辑不适用于多个页面 - cookie 将相互覆盖,代码将变得不可靠。

于 2013-09-13T01:31:01.493 回答