php cookie中点号(句号)自动转为下划线问题

yipeiwu_com7年前PHP代码库

php cookie中不能使用点号(句号),实际上不是很严格,应该说可以使用点号的cookie名,但会被转换,你命名一个cookie:

$_COOKIE[‘my.name'] = 1; 

实际上你不能通过'my.name'在cookie中查找到这个值,只能是'my_name':

echo $_COOKIE[‘my_name']; 

php已经自动帮你进行了转化,句点转为了下划线。

php为什么要这样做呢?这是因为$_GET/$_POST/$_SERVER/$_COOKIE。。。这些全局函数的值,在之前的许多版本中是可以通过register_globals参数在本地中直接访问这些值的,比如开启register_globals = on后,访问$my_name直接取值为1。如果是$my.name的话,则不符合php变量命名原则,这不单是句号(.)的问题。

因此,$_COOKIE的命名已经符合php命名标准。

另外开启register_globals是一个很糟糕的决定,因为它可能会覆盖脚本中原来的值,比如:

// other code
if ($a)
    $uc_is_login = true;
// ... 

用户只需要发送一个url?a=1的http请求就可以默认已经登陆。这是个很危险的做法,应该把它关闭。实际上php6已经去除了这个选项。

相关文章

PHP FileSystem 文件系统常用api整理总结

PHP FileSystem 文件系统常用api整理总结

本文实例讲述了PHP FileSystem 文件系统常用api。分享给大家供大家参考,具体如下: 参数说明:$filename (文件的路径) 1-4 文件信息相关 filetyp...

PHP设计模式之责任链模式的深入解析

责任链模式,其目的是组织一个对象链处理一个如方法调用的请求。当ConcreteHandler(具体的处理程序)不知道如何满足来自Client的请求时,或它的目的不是这个时,它会委派给链中...

php获取网卡的MAC地址支持WIN/LINUX系统

复制代码 代码如下: <?php /** 获取网卡的MAC地址原码;目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ v...

使用PHPStorm+XDebug搭建单步调试环境

使用PHPStorm+XDebug搭建单步调试环境

PHP是一个解释执行的语言,一般来说,进行调试的时候,只要通过使用 var_dump 或者 var_export 两个函数,就可以得到PHP中变量的值,达到调试的地步,但是对于大型项目,...

php获取后台Job管理的实现代码

复制代码 代码如下: <?php defined('SYSPATH') OR die('No direct access allowed.'); class Controller_...