每个会话需要单个弹出窗口

时间:2012-06-11 10:23:36

标签: php

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

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

3 个答案:

答案 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 } ?>