php cookie 作用范围–不要在当前页面使用你的cookie

 更新时间:2009年03月24日 00:26:47   作者:  
这两天在调试bug的时候遇到了一个问题,就是页面莫名其妙的会跳转到登陆页面
因为在本地测试完全没有问题,所以ssh到远程服务器上(不是发布服务器,建议不要直接在Publish Server上直接改东西),进行了一下断点的测试,最后发现是一个比较复杂的逻辑中有个函数在构造函数中调用了登陆验证。没有验证通过所以就跳走了。
下面我们通过程序来看一下php cookie的使用,也许你看完上面那段还纳闷,这个和cookie有什么联系呢?
大体说一下在我们的MVC结构中所用的登陆验证:
在controller中的构造函数用有一个专门验证登陆的函数,根据模块是否需要登陆验证来加如此函数。
bug程序:在setcookie后,当前页面进行了登陆验证。
bug原因:当前页面是获得不了在此页刚刚设置的cookie的
下面我们来用程序测试一下:
这里是一个设置cookie的函数,我们现在用的,偷懒了 呵呵
复制代码 代码如下:

function dsetcookie($var, $value, $life = 0) {
global $_cookie_domain, $_cookie_path, $_timestamp, $_SERVER;
setcookie($var, escape($value), $life ? $_timestamp + $life : 0,
$_cookie_path, $_cookie_domain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);
}

然后建立test1.php,内容如下:
复制代码 代码如下:

<?php
$td = date('d');
dsetcookie("testvar",$td,30*24*60*60);
print_r($_COOKIE);
?>

将会得到一个空的数组array();
那我们在设置完后什么时候才能第一次使用这个$_COOKIE变量呢?
现在我们把test1.php这个程序稍微改动一下:
复制代码 代码如下:

<?php
$td = date('d');
dsetcookie("testvar",$td,30*24*60*60);
print_r($_COOKIE);//这个要注释掉 要不然会报header警告
$location = "test2.php";
header("Location: ".$location);
?>

然后我们在test2.php中来显示$_COOKIE看一下
复制代码 代码如下:

<?php
print_r($_COOKIE);
?>

这里我们将会得到:
Array
(
[testvar] =10
)
这里就能够获得并使用这个cookie值了。
为什么呢?
你可以这么理解:当前设置的Cookie不是立即生效的,而是要等到下一个页面时才能看到.
这是由于在设置的这个页面里Cookie由服务器传递给客户浏览器,在下一个页面浏览器才能把Cookie从
客户的机器里取出传回服务器的原因。

先写到这里:

你可以通过下面的几个链接更加深入的了解一下COOKIE

PHP COOKIE及其使用

Netscape公司关于Cookie的官方原始定义的网址:http://www.netscape.com/newsref/std/cookie_spec.html

相关文章

  • 木翼下载系统中说明的PHP安全配置方法

    木翼下载系统中说明的PHP安全配置方法

    木翼下载系统中说明的PHP安全配置方法...
    2007-06-06
  • PHP函数func_num_args用法实例分析

    PHP函数func_num_args用法实例分析

    这篇文章主要介绍了PHP函数func_num_args用法,结合实例形式较为详细的分析了func_num_args函数返回函数参数的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • php file_get_contents取文件中数组元素的方法

    php file_get_contents取文件中数组元素的方法

    下面小编就为大家带来一篇php file_get_contents取文件中数组元素的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 理解PHP中的Session及对Session有效期的控制

    理解PHP中的Session及对Session有效期的控制

    这篇文章主要介绍了理解PHP中的Session及对Session有效期的控制,Session默认有效期为1440秒而后则会用到PHP的垃圾回收,需要的朋友可以参考下
    2016-01-01
  • 功能强大的PHP发邮件类

    功能强大的PHP发邮件类

    这篇文章主要为大家详细介绍了功能强大的PHP发邮件类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • php和js如何通过json互相传递数据相关问题探讨

    php和js如何通过json互相传递数据相关问题探讨

    json是js的一种数据格式,可以直接被js解析,php无法直接读取json数据,但是php提供了json_decode函数来对json数据进行转化,从而可以被php脚本访问,今天,站长就和大家一起来探讨这个问题,感兴趣的你可以参考下哦
    2013-02-02
  • Ubuntu中搭建Nginx、PHP环境最简单的方法

    Ubuntu中搭建Nginx、PHP环境最简单的方法

    这篇文章主要介绍了Ubuntu中搭建Nginx、PHP环境最简单的方法,本文讲解的是使用apt-get工具安装Nginx、PHP环境,并讲解了基本配置,需要的朋友可以参考下
    2015-03-03
  • PHP响应post请求上传文件的方法

    PHP响应post请求上传文件的方法

    这篇文章主要介绍了PHP响应post请求上传文件的方法,涉及php针对post传输数据处理的相关技巧,需要的朋友可以参考下
    2015-12-12
  • PHP设计模式之命令模式示例详解

    PHP设计模式之命令模式示例详解

    这篇文章主要给大家介绍了关于PHP设计模式之命令模式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • php Try Catch异常测试

    php Try Catch异常测试

    首先感谢老曹同学。。。主要测试了多层级使用异常。 注意蓝色加粗字。
    2009-03-03

最新评论