是阿, 我在windows2000下用的php版本为:php 4.3.2 没有这种情况,即可以正常使用session. 打开B窗口,B窗口中的session ID 与A窗口中的session ID 不同,所以session是正确的。 但是同样的代码,到了Linux下就不行了,出现以上错误。我想应该是配置文件的问题,但是我想不到是哪个文件。我是在Redhat Linux 8.0 自带的php+mysql+apache。php版本应该都是比较新的,是4.2.2,出现这样的问题真不知道是什么原因,会不会是版本的问题? 我分别把windows2000下和Linux下的phpinfo()相关于session的列出来,如下: windows2000 php版本:4.3.2 session Session Support enabled Registered save handlers files user Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 On On session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 100 100 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path /tmp /tmp session.serialize_handler php php session.use_cookies On On session.use_only_cookies Off Off session.use_trans_sid On On Redhat linux 8.0 php版本:4.2.2 wddx WDDX Support enabled WDDX Session Serializer enabled session Session Support enabled Directive Local Value Master Value session.auto_start Off Off session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path /tmp /tmp session.serialize_handler php php session.use_cookies On On session.use_trans_sid 0 0 请大家研究一下。
在我把全部IE关掉后,再打开一个IE,这时候的session就是一个新的session。这个是正常的。
就只是A窗口和B窗口的情况不正常。
我在windows2000下用的php版本为:php 4.3.2
没有这种情况,即可以正常使用session.
打开B窗口,B窗口中的session ID 与A窗口中的session ID 不同,所以session是正确的。
但是同样的代码,到了Linux下就不行了,出现以上错误。我想应该是配置文件的问题,但是我想不到是哪个文件。我是在Redhat Linux 8.0 自带的php+mysql+apache。php版本应该都是比较新的,是4.2.2,出现这样的问题真不知道是什么原因,会不会是版本的问题?
我分别把windows2000下和Linux下的phpinfo()相关于session的列出来,如下:
windows2000 php版本:4.3.2 session
Session Support enabled
Registered save handlers files user Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid On On
Redhat linux 8.0 php版本:4.2.2 wddx
WDDX Support enabled
WDDX Session Serializer enabled session
Session Support enabled Directive Local Value Master Value
session.auto_start
Off Off
session.cache_expire
180 180
session.cache_limiter
nocache nocache
session.cookie_domain
no value no value
session.cookie_lifetime
0 0
session.cookie_path
/ /
session.cookie_secure
Off Off
session.entropy_file
no value no value
session.entropy_length
0 0
session.gc_maxlifetime
1440 1440
session.gc_probability
1 1
session.name
PHPSESSID PHPSESSID
session.referer_check
no value no value
session.save_handler
files files
session.save_path
/tmp /tmp
session.serialize_handler
php php
session.use_cookies
On On
session.use_trans_sid
0 0
请大家研究一下。
我在2000下就能正常使用session,没有以上的情况,就只是在Linux 下有问题,代码是一样的,
如下:
a.php
<?
session_start();
$_SESSION['cc'];
$id=session_id(cc);
echo "id:".$id;
?>显示的id就是session的id ,在tmp 文件夹里都有发现。
我的情况并不是shanhe(TNT)的那种情况,如果是,那就说明没问题了。
就是说A窗口和B才窗口的session ID 是一样的,那就公用一个session啦,
并且B窗口和A窗口没有联系,B就只是在A窗口没有关闭的情况下重新打开的一个浏览器窗口。
明白我的问题了吗?
就是关掉IE,再开,session还是有效
修改一下php.ini的session.cookie_lifetime 改为:
session.cookie_lifetime = 0
就是设置session为在浏览器关闭是同时失效。
最后想出来一个办法:
$login_temp=$_POST['login_name'];
session_save_path("c:\\PHP\\session_temp");
session_start();
if(!session_is_registered('login_name'))
session_register('login_name');
if(!IsSet($login_name))
$login_name=$_POST['login_name'];
if(($login_name!=$login_temp) && (IsSet($login_temp)))
$login_name=$login_temp;感觉挺笨的,但是确实管用。
我决定要自己编译一次,于是我下载了php 4.3.2,apache 2.0.47 ,mysql 4.0.13
因为在2000下正常用session的也是php 4.3.2
还有apache 2.0.47算是最新的了,
mysql 也很新,
编译成功,安装成功。
但是当我测试session时,竟然也出现一样的问题,我的天!!
究竟是什么问题!?请问各位在Linux有没有这种情况?
linux自带的有问题,现在连我自己编译的都有问题,难道就我的机子有问题?
困惑ing!!! 有谁能解决这个问题,小弟感激不仅阿!
我的系统是win 2000 p + PHP4.3.2!
还是那个问题!!!
不知道怎么解决!!!
<?
session_start();
$_SESSION['cc'];
$id=session_id(cc);
echo "id:".$id;
?>
楼主,以上是你的测试代码吗?
请注意session_id函数不带参数时是读取session_id,带有参数是设置session_id。
你可用$id=session_id();一试session_id(cc);中cc应视为枚举型的量(类似于echo cc;),win下不能正确识别是php for win的bug
还是id=session_id();都能正确显示session的id值,没有bug.
另外,我先进去linux,看看结果如何.
所以应该与代码没有关系,是环境的问题.
首先声明:由于我没有linux环境,无法测试。只能泛泛的说1、测试用的浏览器必须是同一系统下同一个版本的。这样可排除浏览器的问题
2、session_id是保存于cookie中的,测试前请先删除cookie缓存文件
3、不同的浏览器处理cookie的方式不同。如ie以单个对立文件保存,而ns的cookie是全部保存于一个文件
4、新窗口必须是全新的进程,而不是浏览器菜单上的打开新窗口或ctrl+N
5、测试前删除全部session临时文件在此条件下进行测试,然后贴出结果