我希望弹出式广告只针对任何访问者显示一次,无论访问了多少页面。所以我使用的是这段代码,但我发现此代码会为每个访问过的页面弹出一个新广告。我该如何纠正?:
<?php if(!isset($_COOKIE['ad_zedo'])) {
setcookie('ad_zedo',1);
?>
<script language="JavaScript">
var zflag_nid="1185"; var zflag_cid="3307"; var zflag_sid="823"; var zflag_width="1"; var zflag_height="1"; var zflag_sz="15";
</script>
<script language="JavaScript" src="http://d8.zedo.com/jsc/d8/fo.js"></script>
<?php
}
?>
答案 0 :(得分:1)
Cookie已过期,因为您尚未设置到期时间。设置过期时间如下:
setcookie('ad_zedo',1, time()+60*60*24*30); // 30 days
来自Manual:
<强>过期强>
如果设置为0或省略,则cookie将在会话结束时(浏览器关闭时)到期。
此外,不要忘记设置cookie正在发送HTTP标头,因此在使用setcookie()
之前您无法获得任何输出。
您还可以将标志存储在PHP会话中而不是cookie中。这样做意味着弹出窗口会在新的PHP会话启动时显示(其结束时间由服务器配置定义)。
<?php if(!isset($_SESSION['ad_zedo'])) {
$_SESSION['ad_zedo'] = true;
?>
每页都需要session_start()
。
答案 1 :(得分:0)
好的,因为MrCode已经说过了: 您应该使用Sessions,例如您的代码将遵循 - 未经测试但应该做的事情......
<?php
session_start();
if(!isset($_SESSION['ad_zedo'])) {
$_SESSION['ad_zedo'] = true;
?>
<script language="JavaScript">
var zflag_nid="1185"; var zflag_cid="3307"; var zflag_sid="823"; var zflag_width="1"; var zflag_height="1"; var zflag_sz="15";
</script>
<script language="JavaScript" src="http://d8.zedo.com/jsc/d8/fo.js"></script>
<?php
}
?>
K这应该是魔术;)。
答案 2 :(得分:0)
在将任何输出或标题发送到服务器之前,在页面开头调用setcookie,否则cookie永远不会设置:
<?php
$showadzedo = false;
if(!isset($_COOKIE['ad_zedo'])) { $showadzedo = true; setcookie('ad_zedo',1); }
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
[...]
<?php if($showadzedo) { ?>
<script language="JavaScript">
var zflag_nid="1185"; var zflag_cid="3307"; var zflag_sid="823"; var zflag_width="1"; var zflag_height="1"; var zflag_sz="15";
</script>
<script language="JavaScript" src="http://d8.zedo.com/jsc/d8/fo.js"></script>
<?php } ?>