本人准备开发个插件,刚开始接触这个系统。碰到个问题无法解决,如下:
看代码分析,$_SGLOBAL['supe_uid']这个变量在common.php中进行初始化,然后再do_login.php中进行赋值,它可以在其他各个php文件中自由传递,我仿照这个变量自己设计一个$_SGLOBAL['supe_book']变量,也在common.php中进行初始化,然后再do_login.php中进行赋值,但这个值却不能自由传递,即当程序通过include跳转到另一php文件后,这个值就自动初始化了。跟踪了系统登陆的整个代码,还是百思不得其解,望高人相助。

解决方案 »

  1.   

    你在 do_login.php 中对 $_SGLOBAL['supe_book'] 赋值的时候,是在一个 function 里吗?如果是的话,有没有先写一行 global $_SGLOBAL 呢?如果没有这个,那实际上只是对一个局部变量赋值。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  2.   


    不是通过function赋值.
    在do_login中, $_SGLOBAL['supe_uid'] 的赋值是通过$_SGLOBAL['supe_uid'] = $space['uid'];来实现的,通过这个赋值,$_SGLOBAL['supe_uid'] 就可以在各个php文档中传递了。我在测试阶段,给$_SGLOBAL['supe_book']赋个固定值(比方说179),即在下一行写入$_SGLOBAL['supe_book'] = 179;但无法在其他文档中传递,当我在space.php中echo $_SGLOBAL['supe_book']时,出现的不是179,而是在common.php中初始化的值;而echo $_SGLOBAL['supe_uid']却能出现正确的值。按理说$_SGLOBAL['supe_uid']和$_SGLOBAL['supe_book']是两个类似的变量,不存在一个可以传递一个不能传递的可能性啊。难道在uchome的其他什么地方我忽略了什么东西?
      

  3.   

    我想……呃……你是不是误会了“全局变量”的含义?……PHP 的全局变量,只是在一个 HTTP Request 的范围内有效的。当一个请求被 do_login.php 处理的时候,你给 $_SGLOBAL['supe_book'] 赋了一个值,但这个值在处理结束后就消失了。等到下一个请求被 space.php 处理的时候,$_SGLOBAL 是全新的。--------
    With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is
    hard to be sure where they are going to land, and it could be dangerous sitting under them as they
    fly overhead.
      

  4.   

    我也考虑过这个问题,但不知道uchome系统$_SGLOBAL['supe_uid'] 如何实现在这个系统内文件间的传递?
      

  5.   

    这个事情,要从两个角度说:1. 在同一次 HTTP Request 处理过程中,只要某处设置了 $_SGLOBAL['supe_uid'],此后所有的代码都可以直接引用这个全局变量。2. 后续的 HTTP Request 处理过程中,如何得到有效的 $_SGLOBAL['supe_uid'] 呢?实际上,uchome 是把用户的登录信息以 cookie 的方式保存到客户端了,每次执行到 common.php 时,里面都会调用 checkauth() 这个方法(该方法是在 function_common.php 中实现的),它会解析 cookie,并设置 $_SGLOBAL['supe_uid']。现在清楚了吧  :)
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)