!!!等待急救,关于SESSON跨页传递的问题!!!100分 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!

tmran 2008-10-04 02:36:46
我在本机调试PHP使用SESSION的问题,但是,死活就是只能在自身网页读出来,跨页就不能读出来,我写了三个文件:

t1.php

<?PHP //用IP来作为SESSION_ID
global $TransIp;
if ( !empty($_SERVER["HTTP_X_FORWARDED_FOR"]) )//有經過代理主機
{
$tempip = split(",", $_SERVER["HTTP_X_FORWARDED_FOR"]);
$UserIp = $tempip[0];
}
else
{
$UserIp = $_SERVER["REMOTE_ADDR"];
}
$TransIp =str_replace(".","",$UserIp);
session_id($TransIp); // 用 session_id() 可避免user的cookie沒開的問題

//echo "写入的SESSION值是:".$_SESSION["address"];
?>

t2.php

<?php
session_start();
include_once 't1.php'; // 時隔一年多,已忘了這行有沒有必要加,你可以先不加這行試試看
$id = "8881"; //strtoupper($_POST['id']);
$password = "12345611111";//$_POST['password'];
$_SESSION['userid'] = $id;
$_SESSION['password'] = $password;// 以下類推隨你加
echo "session_id is : ".session_id($TransIp)."<br>";; //读出来的值是:127001
echo "写入的SESSION值是:<br>".$_SESSION['userid']."<br>".$_SESSION['password']; //这里读出来的结果正常。
?>

t3.php

<?PHP
session_start();
include_once('t1.php');
echo "session_id is : ".session_id($TransIp)."<br>"; //读出来的值是127001
echo "读出的SEESION值是:<br>".$_SESSION['userid']."<br>"; //读出来的是空值;
echo $_SESSION['password']."<br>"; //读出来的是空值;
echo session_id($TransIp)."<br>结束";
?>

其他资讯:
我设定的SESSION保存目录是C:/php5/temp,所以,第一次运行t2.php的时候,C:/php5/temp/下面会生成两个文件,其中一个是sess_127001 //用写字板打开,里面的内容是:userid|s:4:"8881";password|s:11:"12345611111";
sess_oehm3m8lp57le2a8v9569ms6m0 文件大小为0;
刷新t3.php,又会生成文件,sess_him2nsmhi9dsep8djnmn0vhmc7
简单说,每次刷新t2.php和t3.php的时候,都会多一个0字节的文件产生,文件名随机。
为什么t3.php不能读到值呢?

补充资料:
1、操作系统为windowsXP;
2、PHP版本为PHP5;
3、PHP读写MYSQL数据库正常。
4、phpinfo的资料显示有关SESSION的部分如下:

Session Support enabled
Registered save handlers files user
Registered serializer handlers php php_binary wddx

Directive Local Value Master Value
session.auto_start On On
session.bug_compat_42 Off Off
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_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure On On
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path C:/php5/temp/ C:/php5/temp/
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0

...全文
110 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tmran 2008-10-06
  • 打赏
  • 举报
回复
好像不是这几个值得问题,我第一次是用下载包里面默认的php.ini修改的,结果不能用。
第二次是用php.ini-dist修改的。就可以了,估计是有我没有注意到的参数吧。
microant 2008-10-04
  • 打赏
  • 举报
回复
是session的path、domain、expires相关的几个设置用了错误的值吧。
tmran 2008-10-04
  • 打赏
  • 举报
回复
问题搞定了,小小恭喜一下。
看来我的判断是正确的,就是PHP.ini配置的问题,从头配置一次以后就可以了,上面的代码怎么修改都可以实现。

谢谢以上热心的TX!!!!
yctin 2008-10-04
  • 打赏
  • 举报
回复
楼上正解

t1.php
<?PHP    //用IP来作为SESSION_ID
global $TransIp;
if ( !empty($_SERVER["HTTP_X_FORWARDED_FOR"]) )//有經過代理主機
{
$tempip = split(",", $_SERVER["HTTP_X_FORWARDED_FOR"]);
$UserIp = $tempip[0];
}
else
{
$UserIp = $_SERVER["REMOTE_ADDR"];
}
$TransIp =str_replace(".","",$UserIp);
session_id($TransIp); // 用 session_id() 可避免user的cookie沒開的問題
session_start();

//echo "写入的SESSION值是:".$_SESSION["address"];
?>


t2.php
<?php
include_once 't1.php'; // 時隔一年多,已忘了這行有沒有必要加,你可以先不加這行試試看
$id = "8881"; //strtoupper($_POST['id']);
$password = "12345611111";//$_POST['password'];
$_SESSION['userid'] = $id;
$_SESSION['password'] = $password;// 以下類推隨你加
echo "session_id is : ".session_id($TransIp)." <br>";; //读出来的值是:127001
echo "写入的SESSION值是: <br>".$_SESSION['userid']." <br>".$_SESSION['password']; //这里读出来的结果正常。
?>


t3.php
<?PHP
include_once('t1.php');
echo "session_id is : ".session_id($TransIp)." <br>"; //读出来的值是127001
echo "读出的SEESION值是: <br>".$_SESSION['userid']." <br>"; //读出来的是空值;
echo $_SESSION['password']." <br>"; //读出来的是空值;
echo session_id($TransIp)." <br>结束";
?>
aay.zhang 2008-10-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tmran 的回复:]
不行啊,TX们!

不管是:
session_id( 'xxxx' );
session_start();

还是

session_start();
session_id( 'xxxx' );

都没用,效果是一样的,

另外,这样
//session_start();
//session_id( 'xxxx' );
即不指定ID和不使用手动启动,都是一样的,还是只能在当前页输出SESSION。

还得有劳大家啊。搞了一天多了,没有效果。
[/Quote]
呵呵 你对session的理解有误
只有通过页面间链接的传递session才能保持
你对t2和t3页面的访问相当于再次访问主机 与第一次的t1访问之间没有任何联系 因此每次访问产生了一个新的session
解决方案
t2.php与t3.php开头的位置分别加上:
session_start();
session_id( 'xxxx' );

p.s.session_start()要写在前面 谢谢~~
qngzh 2008-10-04
  • 打赏
  • 举报
回复
把你的php.ini贴出来大家看看呀
tmran 2008-10-04
  • 打赏
  • 举报
回复
cookie设置是允许
第一方、第三方。。。。

总之是没有限制。

我怀疑是不是系统配置(PHP.ini)还有什么没有设置对。
qngzh 2008-10-04
  • 打赏
  • 举报
回复
是不是浏览器Cookie禁止掉了?
tmran 2008-10-04
  • 打赏
  • 举报
回复
不行啊,TX们!

不管是:
session_id( 'xxxx' );
session_start();

还是

session_start();
session_id( 'xxxx' );

都没用,效果是一样的,

另外,这样
//session_start();
//session_id( 'xxxx' );
即不指定ID和不使用手动启动,都是一样的,还是只能在当前页输出SESSION。

还得有劳大家啊。搞了一天多了,没有效果。
qngzh 2008-10-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 himan2002 的回复:]
就是指定session_id一定要在session_start之前
session_id( 'xxxx' );
session_start();
[/Quote]
ls正解
himan2002 2008-10-04
  • 打赏
  • 举报
回复
就是指定session_id一定要在session_start之前
session_id( 'xxxx' );
session_start();
himan2002 2008-10-04
  • 打赏
  • 举报
回复
t1.php
<?PHP
global $TransIp;
if ( !empty($_SERVER["HTTP_X_FORWARDED_FOR"]) )
{
$tempip = split(",", $_SERVER["HTTP_X_FORWARDED_FOR"]);
$UserIp = $tempip[0];
}
else
{
$UserIp = $_SERVER["REMOTE_ADDR"];
}
$TransIp =str_replace(".","",$UserIp);
session_id($TransIp); // 用 session_id() 可避免user的cookie沒開的問題

//echo "写入的SESSION值是:".$_SESSION["address"];
?>

t2.php

<?php
include_once 't1.php'; // 時隔一年多,已忘了這行有沒有必要加,你可以先不加這行試試看
session_start();
$id = "8881"; //strtoupper($_POST['id']);
$password = "12345611111";//$_POST['password'];
$_SESSION['userid'] = $id;
$_SESSION['password'] = $password;// 以下類推隨你加
echo "session_id is : ".session_id()." <br>";; //读出来的值是:127001
echo "写入的SESSION值是: <br>".$_SESSION['userid']." <br>".$_SESSION['password']; //这里读出来的结果正常。
?>

t3.php

<?PHP
include_once('t1.php');
session_start();
echo "session_id is : ".session_id()." <br>"; //读出来的值是127001
echo "读出的SEESION值是: <br>".$_SESSION['userid']." <br>"; //读出来的是空值;
echo $_SESSION['password']." <br>"; //读出来的是空值;
echo session_id()." <br>结束";
?>
cayleung 2008-10-04
  • 打赏
  • 举报
回复
把所有session都加多个"_x"吧,如$_SESSION['password_x'],试试看。
tmran 2008-10-04
  • 打赏
  • 举报
回复
不能下沉啊


高手出招吧
tmran 2008-10-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iasky 的回复:]
你的seesion的 tmp目录配置好没有?
[/Quote]
配置好了,设定是:C:/php5/temp
并且每次写入SESSION时,有两个文件产生,其中一个是SESS_127001,内容就是我写入的内容,另一个文件是空的,0k。
iasky 2008-10-04
  • 打赏
  • 举报
回复
你的seesion的 tmp目录配置好没有?
tmran 2008-10-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 szgekko 的回复:]
t1.php
没有
session_start();
[/Quote]

加上之后测试,效果一样。
用不用都一样,并且PHP配置中已经让SESSION自动运行了。
所以,可以确认跟这个没有关系。
szgekko 2008-10-04
  • 打赏
  • 举报
回复
t1.php
没有
session_start();

21,886

社区成员

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

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