If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister(). 引自php手册,希望对你们有帮助。
这个session真的就这么麻烦吗? 我也是同样的错误啊,我的好像也是设置方面的,但我看过这里好多关于session的帖子,发现大家的问题都八九不离十,可没有一个解决掉的。同样的我的/tmp目录在C盘根目录下。 还有一点,我在修改php.ini中的内容的时候,保存后,phpinfo()中的内容怎么不会跟着刷新呢?非要重起一次,真是晕。 看来我们还没有找到问题的根源,看看我的的错误提示: Warning: session_start(): open(/tmp\sess_ad7bca0da5e4495dbfac7170508dc091, O_RDWR) failed: No such file or directory (2) in F:\fangdi\temp\test2.php on line 2Warning: session_start(): Cannot send session cookie - headers already sent by (output started at F:\fangdi\temp\test2.php:2) in F:\fangdi\temp\test2.php on line 2Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at F:\fangdi\temp\test2.php:2) in F:\fangdi\temp\test2.php on line 2 Failed.源文件如下: ==test2.php== <? session_start(); $name = "hello"; session_register('name');print $_SESSION['name']; ?> <center><a href="test1.php">goto</a></center>==test1.php== <? session_start(); print $_SESSION['name']; ?>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 localhost localhost 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 Off Off
还是不行 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
kingerq(多菜鸟) 我觉得在windows下面不能用/tmp这样的目录写法,linux下面才这样显示目录,我就用的d:\server\apache\htdocs\tmp这样的写法。session很正常 看你的提示信息也是说目录错误,没有这样的目录(\tmp), 在php.ini中有一个关于session_save_path的说明Note: Windows users have to change this ; variable in order to use PHP's session functions.
testsession.php
<?php
session_start();
$name = "dw";
session_register("name");
?>
<center><a href="testsession2.php">goto</a></center>testsession2.php
<?php
session_start();
echo "value is:".$_SESSION['name'];
echo "<br>Is reg?".session_is_registered('name');
?>
使用的ntfs分区吗?请楼主说明一下。可以创建文件,但是无法写入内容???
但是使用session_register($name);
得不到正确的结果。使用session_register($name);是可以设置session的,但是恐怕名字不对,所以无法显示
正确的内容
第2页中使用session_is_registered('dw');,是显示1的。
引自php手册,希望对你们有帮助。
其中的变量名称要用单引号引起来
session_start();要在每页的开头写。
<?
session_start();
session_register('username');
$username = "zz";
?>引用session变量的页要这样写。
<?
session_start();
echo $username;
?>
一定要用单引号。
我是在win2000下的程序,会出好多怪问题呢。
比如,有时程序好好的,就是通不过。
把机器重启,就通过了。
唉。。
2、从楼主的几次发贴来看,不是没有session临时目录或目录权限问题我们一般见到的比较权威的php书籍是以php4.0.6或更早的版本为基础的。但这两年php发生了重大变化。为了满足高层次的目标,php做了较大的改动,其中最为突出的是session的存储机制的改变。
从php4.1.0开始到目前的php4.3.2,每一个小版本都有对session处理上的变化。
对此,我建议:在讨论此类问题时,首先要说明所用php的版本。只有这样才有再现的可能。很快,php5就要正式出来了。可能会带来更多的问题,其实都是不是问题的问题。只要你不要抱做一本书不放。经验是宝贵的,但不是万能的。
正确的内容这样是不行的, 呵呵.再度推荐我的写法:
session_start()后, 注册变量用$_SESSION['变量名'] = 值用单引号的好处是防止其中的变量名有被解析掉的可能(比如和常量同名的时候)
a.php:
<?
ob_start();
session_start();
session_register('cc');
$cc=10;
echo "<a href=bbb.php>bbb</a>";
?>b.php:
<?
session_start();
$cc++;
echo "cc ".$cc;
?>
当我按历史后退回到a.php时,再点击aaa,结果,再url上看到的PHPSESSID于之前的不一样了,是不是证明了session没有效了,然后再重新注册一个?那如果我想保持唯一的PHPSESSID,比如用来标识某一次唯一的用户,那怎么办?真的搞的一塌胡涂。然后我在b.php的echo "cc ".$cc;后面加上echo "<a href=aaa.php>aaa</a>"; 连接到aaa.php,然后再点击bbb,可以看到这时候url上的PHPSESSID就保持了跟上一次一样的值。所以,我一直搞不清楚session到低是怎样用的。
请各位赐教
a.php:
<?
session_start();
session_register("Name");
$Name='jeff';
//Header("location:test22.php"); //原来是这样写的,后来发现不行,我就改成下一行,
//可以了
echo "<a href=test22.php>kkk</a>";?>b.php
<?
session_start();
echo $Name."**********";
?>
结果,在b.php能正常显示:jeff********** ,但是我不知道为什么用
Header("location:test22.php"); 就不能显示jeff.还有
当我按历史后退回到a.php时,再点击aaa,结果,再url上看到的PHPSESSID于之前的不一样了,是不是证明了session没有效了,然后再重新注册一个?那如果我想保持唯一的PHPSESSID,比如用来标识某一次唯一的用户,那怎么办?真的搞的一塌胡涂。然后我在b.php的echo "cc ".$cc;后面加上echo "<a href=aaa.php>aaa</a>"; 连接到aaa.php,然后再点击bbb,可以看到这时候url上的PHPSESSID就保持了跟上一次一样的值。所以,我一直搞不清楚session到低是怎样用的。
请各位赐教
aaa.php
<?
ob_start();
session_start();
if(session_is_registered('cc'))
echo "y";
else
echo "not";session_register('cc');
if(session_is_registered('cc'))
echo "y";
else
echo "not";
$cc=10;
echo "r:".$r;
echo "<a href=aaa.php>kkk</a>";
?>首先输入aaa.php
显示:notyr:kkk
然后点击kkk,url显示:aaa.php?PHPSESSID=f9b30b6c9ec29d10a0dab15ba7ac5aba
显示:yyr:kkk
然后再历史后退到aaa.php
显示:notyr:kkk
无论怎么刷新,也是显示 notyr:kkk
证明虽然cc已经session注册了,但是在当前浏览器中,后退了就cc还是没有被注册。
session不是贯穿直到关闭浏览器吗?为什么连后退一下就显示没有注册了?真是莫名其妙。
我也是同样的错误啊,我的好像也是设置方面的,但我看过这里好多关于session的帖子,发现大家的问题都八九不离十,可没有一个解决掉的。同样的我的/tmp目录在C盘根目录下。
还有一点,我在修改php.ini中的内容的时候,保存后,phpinfo()中的内容怎么不会跟着刷新呢?非要重起一次,真是晕。
看来我们还没有找到问题的根源,看看我的的错误提示:
Warning: session_start(): open(/tmp\sess_ad7bca0da5e4495dbfac7170508dc091, O_RDWR) failed: No such file or directory (2) in F:\fangdi\temp\test2.php on line 2Warning: session_start(): Cannot send session cookie - headers already sent by (output started at F:\fangdi\temp\test2.php:2) in F:\fangdi\temp\test2.php on line 2Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at F:\fangdi\temp\test2.php:2) in F:\fangdi\temp\test2.php on line 2
Failed.源文件如下:
==test2.php==
<?
session_start();
$name = "hello";
session_register('name');print $_SESSION['name'];
?>
<center><a href="test1.php">goto</a></center>==test1.php==
<?
session_start();
print $_SESSION['name'];
?>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 localhost localhost
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 Off Off
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
我觉得在windows下面不能用/tmp这样的目录写法,linux下面才这样显示目录,我就用的d:\server\apache\htdocs\tmp这样的写法。session很正常
看你的提示信息也是说目录错误,没有这样的目录(\tmp),
在php.ini中有一个关于session_save_path的说明Note: Windows users have to change this ; variable in order to use PHP's session functions.
要把$name这样的变量注册到seesion中,要session_register['name'],而不是session_register[$name]如果$name=abc这样的写法相当于是session_register['abc']解决了写法问题再看session设置目录的问题
那为什么我c般下的tmp目录里会有东西产生呢?我每刷新一次都会有一个关于session文件出来,打开一看里面的内容和注册的内容是相符的。
<?
....
session_save_path("./session_temp");
....
?>
php中默认的session.save_path="F:/temp";结果发现在运行该程序时,session信息被写入F:/temp中,而在session_temp中也有一个同名文件,但内容是空的,请教这是怎么回事???