首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

关于cookie和session的问题

最近看了session永不过期的设置,修改php.INI文件暂且不说,单说这个程序修改的方法,我在书上和网上看到如下同样的代码,我有几点困惑:
<?php
session_start(); // 启动Session 
$_SESSION['count']; // 注册Session变量Count 
isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID = session_id(); 
// 如果设置了$PHPSESSID,就将SessionID赋值为$PHPSESSID,否则生成SessionID 
 
$_SESSION['count']++; // 变量count加1 
setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 储存SessionID到Cookie中 
echo $count; // 显示Session变量count的值 
?>

我能理解大致的意思,我所困惑的是,是不是早期的php对sesison和cookie中变量的访问方式不同?我看到有这样说的:
当 PHP 脚本从客户浏览器提取了一个 cookie 后,它将自动的把它转换成一个变量。例如:一个名为 CookieID 的 cookie 将变成变量 $CookieID.
我怀疑这是早期php的访问方式,正因为如此我不太懂上面代码中$PHPSESSID和$count的由来,我觉得应该是$_cookie['PHPSESSID']和$_SESSION['count'];
我去查php4的手册没找到相关论述,本人php新手,不了解php的历史,希望有大神解疑~~~~
昵称: 【纵我不往】  时间: 2013-05-25 23:28:22
你提到的 “cookie自动转换为变量” 是PHP的 register global 特性。如果你在 php.ini 中设置 register_globals = On 时,PHP就会把所有的请求数据设置为PHP变量,不光是 $_COOKIE, 还有 $_GET, $_POST 等一系列用于存储请求数据的数组。这会带来一些潜在的安全性问题,所以一般都是建议关闭的。

这个特性在 PHP 4.2.0 之前一直是默认开启的,但在 PHP 4.2.0 之后已经默认关闭了。从5.3开始会DEPRECATED,5.4中这个特性就要删除了。

你给出的代码可以兼容 register_globals 开启和不开启的情况。它首先检查 $PHPSESSID 是否存在(若register_globals开启,则该变量存在),如果不存在,就设置它的值。

所以,如果你的PHP环境关闭了register_globals,那么对 $PHPSESSID 的检查就会发现该变量不存在,从而给他赋值。不会影响程序的功能。
昵称: dzy0451  时间: 2013-05-25 23:28:23
dzy0451 发表于 2013-5-26 10:44
你提到的 “cookie自动转换为变量” 是PHP的 register global 特性。如果你在 php.ini 中设置 register_glo ...

嗯,兄台说得对,我已经查到了,哎,现在出书的都不严谨,也是直接拿网上代码贴的~~
昵称: 【纵我不往】  时间: 2013-05-26 13:54:50
楼上正解啊
昵称: 可可可  时间: 2013-07-26 16:07:49