|
最近在使用sablog-x写博客,这是一套开源的blog系统,用php开发的。在使用过程中发现后台管理时一修改其他受限管理员密码就会报权限错误。
经过追查,发现当修改其他管理员信息时,当前用户会切换成那个被修改的受限管理员。进一步追查,发现是session中的adminid被修改了。
原作者在开发这套系统的时候是在register_globals = off的环境下开发的。在修改其他管理员的代码里,作者用到了$adminid这个变量。由于我的虚拟主机环境是register_globals = on的,所以对$adminid这个变量的修改会反映到$_SESSION['adminid'],导致了前面的错误。
register_globals这个配置是不能使用ini_set()函数在运行时修改的。看了php手册,里面有一个邮件为rn214 at cam dot ac dot uk 的网友给了一种解决方法,可以临时取消register_globals对session的绑定:
[php]
<?php
$unset = array_keys($_SESSION);
foreach($unset as $rg_var){
if(isset($$rg_var)){
unset($$rg_var);
}
}
?>
[/php]
另外rumby328 at yahoo dot com 给出了临时取消register_globals对request和server的绑定的方法:
[php]
<?php
if (@ini_get('register_globals'))
{
$remove_vars = $_REQUEST + $_SERVER;
foreach ($remove_vars as $key => $value)
{
unset($$key);
}
}
?>
[/php]
希望对大家有所帮助。:) |
|