[字号:  ]

有关session_register注册不到变量的问题

发布时间:2008-8-20 20:57   作者: konakona   信息来源: PHPChina 开源社区门户
我记得我原先还能注册的,但是后来改动了不少代码,这些就忽然无效了.只能注册password.很奇怪- =
我把代码简单点给大家看.很明了的.
如果说post值没带到,那2个session为空,正常.但是连赋值都失败,是为什么???
下面我把测试图放上来:
用户名:测试用
密码:ceshi



aaa.JPG


能注册password... 囧了.
但是不知道为什么.匹配资料后,并没有把username的值给session变量.
也没有修改isuser的值为1.


如果要看整站代码,在http://bbs.phpchina.com/thread-75123-1-1.html 后面几楼

[ 本帖最后由 konakona 于 2008-8-20 21:26 编辑 ]

最新回复

konakona at 2008-8-20 21:22:33
没有人帮我?
CrossMaya at 2008-8-20 21:23:49
没看出session哪不对 你逻辑不对
konakona at 2008-8-20 21:27:07
高手你既然看出我逻辑有问题为何不指点两句?

[ 本帖最后由 konakona 于 2008-8-20 21:37 编辑 ]
konakona at 2008-8-20 21:37:12
最后我用了
        $_SESSION['username']=$username;
        $_SESSION['passwrod']=$password;

来解决问题

但是为什么用session_register('username');就不能呢???奇怪的事儿.

这样就没办法用 if (session_is_registered('username') && session_is_registered('password'))
来判断了...
0000. at 2008-8-20 21:38:48
session_register 早就不推荐使用了。
0000. at 2008-8-20 21:39:22
if (isset('username') && isset('password'))

这样就OK了啊。
konakona at 2008-8-20 21:41:38

QUOTE:

原帖由 0000. 于 2008-8-20 21:39 发表
if (isset('username') && isset('password'))

这样就OK了啊。
但是我记得我原先能用起的- =

哎...原先的代码就跟

$a='china';
$b='china';
        session_register('a');
        session_register('b');
        $_SESSION['isuser']=1;
        print_r($_SESSION);

似的..能用起也不足为奇了...


你的这个不行啊.
我又不想把它赋值给$username,这样不就失去了session的作用不是吗?
而且如果直接if($isset($username))
那么我从别的页面POST过来的username不就正好是有值么.这样不正确.也不对.




还记得我开头有一个session初始化不?防注入的.

而且特意用了switch.



不知道为什么那个if失效.并没有中止脚本执行- =
反而执行了session初始化操作- =

[ 本帖最后由 konakona 于 2008-8-20 22:05 编辑 ]
konakona at 2008-8-20 21:51:26
继续顶
konakona at 2008-8-20 21:59:31
0000.哥们,问题被你复杂化了- =
sara at 2008-8-20 22:02:09
手册上的

QUOTE:

小心
If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.

QUOTE:

小心
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().
konakona at 2008-8-20 22:05:56

QUOTE:

原帖由 sara 于 2008-8-20 22:02 发表
手册上的

第二局看懂了
第一局似乎跟全局变量有关- =
我的php.ini里的全局变量是关闭的.

一般大家都会关的
konakona at 2008-8-20 22:07:24
我现在用if (isset($_SESSION["username"]) && $_SESSION["isuser"]==1)这个搞定了
但是在smarty模块里,原本的判断式不能使用了.
不知道该用什么?这个是原本的.
{if $smarty.session.isuser=="1"}<p>Are you want <a href="login.php?go=out">exit</a>?<br>{/if}

[ 本帖最后由 konakona 于 2008-8-20 22:19 编辑 ]
xuer at 2008-8-20 23:05:53
php6都出来了,你那参考书太旧了吧
心痛 at 2008-8-21 09:33:53

CODE:

function checkuser(){
    $_SESSION['isuser']=0;
    $_SESSION['username']='';
    $_SESSION['passwrod']='';                     <= "passwrod"?
    print_r($_SESSION);
    $username=KillHtml(isset($_POST['username'])?$_POST['username']:'');
    $password=KillHtml(isset($_POST['password'])?$_POST['password']:'');           <="password"?

        echo "用户名:".$username;
        echo "<br>密码:".$password;
        session_register('username');
        session_register('password');                              <="passoword"?
        $_SESSION['isuser']=1;
}
仔细看我标记的地方
wukewei00o at 2008-8-21 09:42:22
session_register的问题我也遇到过,在Apache2X,php4.4下这个函数能用,然后我把服务器改成IIS,这个函数就不起作用了,换成显示的$_SESSION[]赋值就可以了!一直搞不明白
konakona at 2008-8-22 15:21:48

QUOTE:

原帖由 xuer 于 2008-8-20 23:05 发表
php6都出来了,你那参考书太旧了吧
关参考书什么事呢
这是别人最近编写的代码
konakona at 2008-8-22 15:24:02

QUOTE:

原帖由 wukewei00o 于 2008-8-21 09:42 发表
session_register的问题我也遇到过,在Apache2X,php4.4下这个函数能用,然后我把服务器改成IIS,这个函数就不起作用了,换成显示的$_SESSION[]赋值就可以了!一直搞不明白
可能是这个函数有点混乱.也许是bug.

如果只是简单的$a='b';$b='c';

然后session_register(a);

如果只是这样,可以注册.
然后用 session_is_register可以检查到.

但是我那个php代码,似乎并不复杂,也没有什么逻辑错误不是吗.
全部变量我是关了的.

之前最原始我没有修改那份代码,是从别人那里下载来的,能够注册.

但是我修改了一下以后就不能注册了.
我仔细检查过了我的if ,函数等结构,发现没有什么问题.

你们也发现了吧,如果说函数有问题,那么为什么会有一个接受到了并且注册成功呢?
明明3个条件是放在一起的.

所以我认定这个函数有一定的短处.
konakona at 2008-8-22 15:26:05

QUOTE:

原帖由 心痛 于 2008-8-21 09:33 发表

function checkuser(){
    $_SESSION['isuser']=0;
    $_SESSION['username']='';
    $_SESSION['passwrod']='';                     
你标记的我根本没看出什么.

莫非你的意思是叫我用双引号???

其实POST过来的值都会转换成字符串的.并且在处理函数之后也echo出来了.
然后马上,下一步就是
session_register
但是只能注册password,而username和isuser的值都没有赋予进去也没有修改.

所以我现在用的是是$_SESSION[]赋值.
taozi05 at 2008-8-22 16:31:43
看来时代有点在退化呢。
心痛 at 2008-8-23 09:03:18

QUOTE:

原帖由 konakona 于 2008-8-22 15:26 发表


你标记的我根本没看出什么.

莫非你的意思是叫我用双引号???

其实POST过来的值都会转换成字符串的.并且在处理函数之后也echo出来了.
然后马上,下一步就是
session_register
但是只能注册password,而user ...
晕倒,明显你两个地方的单词拼写的错误。一个是password,另外一个是passwrod,看到没