0

无论访问了多少页面,我都希望弹出广告只对任何访问者显示一次。所以我使用了这段代码,但我发现这段代码会为每个访问的页面弹出一个新广告。我该如何纠正它?:

<?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
}
?>
4

3 回答 3

1

cookie 即将到期,因为您尚未设置到期时间。设置到期时间,如:

setcookie('ad_zedo',1, time()+60*60*24*30); // 30 days

手册

到期

如果设置为 0 或省略,cookie 将在会话结束时(浏览器关闭时)过期。

另外,不要忘记设置 cookie 会发送 HTTP 标头,因此在使用setcookie().


您还可以将标志存储在 PHP 会话中而不是 cookie 中。这样做意味着弹出窗口将显示新的 PHP 会话何时启动(其到期时间由您的服务器配置定义)。

<?php if(!isset($_SESSION['ad_zedo'])) {

 $_SESSION['ad_zedo'] = true;
?>

你需要session_start()在每一页上。

于 2012-06-11T10:26:54.917 回答
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 这应该有魔力;)。

于 2012-06-11T10:50:12.457 回答
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 } ?>
于 2012-06-11T10:55:11.920 回答