网站开发日志

2009年2月10日星期二

分享家:Addthis中国

清除IE7的Cookie

我们公司的合作伙伴(affiliate)要求从通过他们的网站进入我们的网站后可以显示他们公司的图标。我们提供的解决方法是这样的:在链接进来的url后加入一个参数,通过这个参数来设置Session变量,然后通过判断Session的存在与否以及Session的值来决定是否显示图片以及显示哪个affiliate的图标。

Page.inc:

//1.先判断URL
$img = (isset($_GET['img'])) ? 
       trim(stripslashes(x_site_safe($_GET['img']))) : "";
//2. 如果URL上没有img参数,查看SESSION变量
if (!$img) $img = (isset($_SESSION['img']))? $_SESSION['img'] : "";
//3. 判断affiliate的图标是否存在
if (file_exists("/var/www/production/images/ns/img_upl/aff_logo_$img.gif"))
  $this->aff_img = $img;

Sessioin.inc

//1.判断url的img参数是否存在
$this->url['img'] = (isset($_GET['img'])) ? 
                     trim(stripslashes($_GET['img']))      : "";
//2.如果是新的访问并且URL含义合法的img参数,设置SESSION变量$_SESSION['img']
if ($this->do_tracking) { 
  if($this->url['img']) $_SESSION['img'] = $this->url['img'];
}

我这里用到if ($this->do_tracking) 目的是只对新访问进行设置SESSION变量。最后根据$this->aff_img存在与否来决定是否在HTML里显示图标。 注意:以上并非完整代码,只是用于示例用。

代码完成了,接下来是在浏览器里测试代码是否正确,首先必须先清浏览器的COOKIE。SESSION变量其实也是一种COOKIE,只是它不是存在客户端的电脑里,而是存放在服务器端。浏览器提供的清空COOKIE的功能同时也可以清除SESSION COOKIE。

在Firefox下,我们使用Web Developer扩展,通过它可以快捷地清除Domain Cookie,然后就可以测试了。测试结果一切正常:如果第一次进入网站并且在URL上加入参数 /?img=1,在整个session内,都可以看到affiliate1的图标。

当时在IE7下,我们碰到了问题。我们使用IE7工具栏里删除选项清空了COOKIE,同样在URL后加入img参数,在第一个页面我们看到了affiliate的图标,但是当点击网页的其他链接进入一个新的页面(URL不在带有img参数),图标就消失了。很明显SESSION变量没有设置正确,按照逻辑,清除COOKIE后,第一次进入网站,如果URL含有img参数,应该要设置SESSION变量的。为什么不行呢?最终的答案是在IE7下清空COOKIE,要重启浏览器才生效!

标签: ,

相关文章:

0 条评论:

发表评论

指向此帖子的链接: