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多线程上下文中安全写文件的实现方法。这个实现没有使用php 的file lock机制,使用的是临时文件机制。多线程中的各个线程都是对各自(每个线程独占一个)的临时文件写,然后再同步到原文件中。
    2009-12-12
  • php抛出异常与捕捉特定类型的异常详解

    php抛出异常与捕捉特定类型的异常详解

    异常捕获在现在很多ide工具里都可以用快捷键很方便的添加上,防止用户看到自己看不懂的报错甚至莫名其妙崩溃,导致用户体验不好。哪怕显示一个友好一些的崩溃提示,也比直接显示error:xxxx xxxxxxxxx要好得多。下面本文将详细介绍php如何抛出异常与捕捉特定类型的异常。
    2016-10-10
  • PHP中功能强大却很少使用的函数实例小结

    PHP中功能强大却很少使用的函数实例小结

    这篇文章主要介绍了PHP中功能强大却很少使用的函数,结合实例形式总结分析了php中非常实用的几个函数,包括函数的调用、注册、调用、判断等操作技巧,需要的朋友可以参考下
    2016-11-11
  • PHP 自定义错误处理函数trigger_error()

    PHP 自定义错误处理函数trigger_error()

    trigger_error() 用于在用户指定的条件下触发一个错误消息。它与内建的错误处理器一同使用,也可以与由 set_error_handler() 函数创建的用户自定义函数使用
    2013-03-03
  • php通过smtp邮件验证登陆的方法

    php通过smtp邮件验证登陆的方法

    这篇文章主要介绍了php通过smtp邮件验证登陆的方法,涉及php通过socket针对SMTP邮件服务器进行连接、读写、验证等相关操作技巧,需要的朋友可以参考下
    2016-05-05
  • PHP正则表达式 /i, /is, /s, /isU等介绍

    PHP正则表达式 /i, /is, /s, /isU等介绍

    PHP正则表达式 /i, /is, /s, /isU等,都代表着什么意思,你知道吗?下面为大家详细介绍下
    2014-10-10
  • PHP实现RabbitMQ消息列队的示例代码

    PHP实现RabbitMQ消息列队的示例代码

    众所周知,php本身的运行效率存在一定的缺陷,所以如果有一个很复杂很耗时的业务时,必须开发一个常驻内存的程序。本文将利用PHP实现RabbitMQ消息列队,感兴趣的可以了解一下
    2022-05-05
  • PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式

    PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式

    条件逻辑有可能十分复杂,因此本章提供一些重构的手法,专门用来简化它们
    2012-04-04
  • PHP5.3安装Zend Guard Loader图文教程

    PHP5.3安装Zend Guard Loader图文教程

    PHP 5.3.X 开始 Zend Optimizer 正式被 Zend Guard Loader 取代了。安装方法有所不同,以下是安装 Zend Guard Loader的具体方法
    2014-09-09
  • php将12小时制转换成24小时制的方法

    php将12小时制转换成24小时制的方法

    这篇文章主要介绍了php将12小时制转换成24小时制的方法,涉及php时间操作的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03

最新评论