发现个奇怪的问题,有关session的,有兴趣的来瞅瞅

jinliangonline 2009-03-16 06:27:57
环境:php5,register_globals 为 off
1.php:
session_start();

$_SESSION['from_url'] = null;

$from_url = 'test2';
复制代码执行后会报这个错误:
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

用另一个文件去查看session,发现$_SESSION['from_url']的值居然是'test2';
session_start();

echo $_SESSION['from_url'];
复制代码有人遇到过这种现象吗?
PS:1.php刷新一下,错误就没了,需要session_destroy()后就可以重现。
...全文
177 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
phpboy 2009-03-17
  • 打赏
  • 举报
回复
test.php


<?php
session_start();

$_SESSION['from_url'] = null;

$from_url = 'test2';
?>
<a href="test2.php">test</a>



test2.php



session_start();

echo $_SESSION['from_url'];
echo $from_url;


phpboy 2009-03-17
  • 打赏
  • 举报
回复
register_globals 为on时,会出现楼主的情况的,关闭的话,应该不会的!

本地测试了一下
关闭后


( ! ) Notice: Undefined variable: from_url in D:\iis\test2.php on line 5
Call Stack
# Time Memory Function Location
1 0.0024 130128 {main}( ) ..\test2.php:0


程序猿之殇 2009-03-17
  • 打赏
  • 举报
回复
果然是null的问题,呵呵,
syu 2009-03-17
  • 打赏
  • 举报
回复
贴出phpinfo()的信息来看看吧.
yctin 2009-03-17
  • 打赏
  • 举报
回复
by ref只是比喻,真实情况要看php session部份的源码
yctin 2009-03-17
  • 打赏
  • 举报
回复
register_globals ... 什么都 globals了当然没错 =.=

pass by value , ref 搜一下就有了

session的自动注册机制google搜不到, 也没有连接 ._.
xinglu1983 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yctin 的回复:]
因为你用了 null,他会在该页被当成 globals 处理

$_SESSION['from_url'] = false;
$_SESSION['from_url'] = "";
用都可以,你要给他一个实值
给null他会当成是参考

效果等同
$varname = "from_url";
@$_SESSION['from_url'] = &$$$varname;

这是他的自动注册机制问题
[/Quote]

这位朋友说的应该是对的,
有两个地方不明白,麻烦再请教下,
给null他会当成是参考,这个“参考”是指什么?
session的自动注册机制是怎么回事?这个是针对php5的吗?
以前没听说过,google也没有搜到,能否给个连接。
谢谢~
xinglu1983 2009-03-17
  • 打赏
  • 举报
回复
刚刚又做了下测试,register_globals如果是on的状态下,反而不会出现这个错误提示的。但是$from_url = 'test2'同样也赋到session里了。

error_reporting(2047);
session_start();
$_SESSION['from_url'] = null;
$from_url = 'test2';
echo 111;
echo $a;
flush();
sleep(5);
echo 222;

加入sleep发现,是在脚本执行结束的时候才会出现错误提示,我只知道session在脚本执行结束时会将内存中$_SESSION变量的值写入到sesion文件里,是不是还进行了其他的操作?导致出现这个错误提示,希望能得到确定的答案。
PS:php版本5.2.0
yctin 2009-03-17
  • 打赏
  • 举报
回复
@$_SESSION['from_url'] = &$$varname;
yctin 2009-03-17
  • 打赏
  • 举报
回复
因为你用了 null,他会在该页被当成 globals 处理

$_SESSION['from_url'] = false;
$_SESSION['from_url'] = "";
用都可以,你要给他一个实值
给null他会当成是参考

效果等同
$varname = "from_url";
@$_SESSION['from_url'] = &$$$varname;

这是他的自动注册机制问题
jinliangonline 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jakey9826 的回复:]
就错误而言,很大原因还是因为register_globals没有关闭.
正常环境下是没有这个问题的.

建议还是从PHP的环境配置上下功夫.
phpinfo();查看一下,register_globals有没有被关闭.有时候你可能修改的不是正确的php.ini,或者没有重启web服务器.
[/Quote]
最开始我也是怀疑是配置问题,但是我同事也出现这个问题。我回家后又测试了一遍,还是这个问题,没出问题的朋友把配置贴出来看看吧。郁闷……
程序猿之殇 2009-03-17
  • 打赏
  • 举报
回复
就错误而言,很大原因还是因为register_globals没有关闭.
正常环境下是没有这个问题的.

建议还是从PHP的环境配置上下功夫.
phpinfo();查看一下,register_globals有没有被关闭.有时候你可能修改的不是正确的php.ini,或者没有重启web服务器.
davidtao0819 2009-03-17
  • 打赏
  • 举报
回复
学习~
xinglu1983 2009-03-17
  • 打赏
  • 举报
回复
7楼你的php版本是多少啊?还有register_globals设置的是on还是off?
phpboy 2009-03-17
  • 打赏
  • 举报
回复
关闭之后
echo $_SESSION['from_url'];
为空!
我用的是PHP5.2.6
jinliangonline 2009-03-16
  • 打赏
  • 举报
回复
瓦哦,不少人回复呢,呵呵首先谢谢大家的热心哈。
[Quote=引用 7 楼 fxs_2008 的回复:]
我测了下,没有有你说的问题

结果

Array ( [from_url] => )
[/Quote]
这个……我正因为不知道为什么会出现这个问题,我才会在这里发帖。



很郁闷,按常识来讲,要能按常识我就不发帖了呵呵
fxs_2008 2009-03-16
  • 打赏
  • 举报
回复
我测了下,没有有你说的问题
a.php
<?php
session_start();

$_SESSION['from_url'] = null;

$from_url = 'test2';

?>
<a href="b.php">b.php</a>


b.php

<?php
session_start();
echo $_SESSION['from_url'];
print_r($_SESSION);


?>

结果

Array ( [from_url] => )


jackydrl 2009-03-16
  • 打赏
  • 举报
回复
大家肯定都看清楚了,但你也得试一下我们提供的方法啊!
xinglu1983 2009-03-16
  • 打赏
  • 举报
回复
楼上几位麻烦看清帖子再回复,写得很清楚,环境:php5,register_globals 为 off
jackydrl 2009-03-16
  • 打赏
  • 举报
回复
你的PHP是4.4.X版本的吧,这个应该是它的一个bug

首先register_global=off保留

你的这个问题在一个网页上有描述
http://www.spiration.co.uk/post/1231/Your%20script%20possibly%20relies%20on%20a%20session%20side-effect

解决方法是,先给出$from_url的值
然后$_SESSION[from_url]=$from_url

然后在http://blog.csdn.net/spidertiger/archive/2006/07/24/969571.aspx上面给出了更详细的解释,如下

In PHP 4.2.3, they made a change to the way that the session code works that results in PHP generating a warning when a session is created. In order to resolve this, we have to update some code in Gallery. This warning has no effect, except that it shows upon screen. You can make it go away by editing your php.ini and setting
session.bug_compat_warn to off

and restart Apache.


意思就是更改session.bug_compat_warn的值为off,重新启动apache
并且这个是警告信息,没有说明什么错误。


加载更多回复(2)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧