今天自己研究dedecms 发现后台管理员保持登陆状态的session是用一个session_register,突然感觉好神奇,就像研究下dede的session是如何存储的,打开看之后真是大跌眼镜呀!
session_register 函数
这是之前php手册上对这个函数的说明:session_register — Register one or more global variables with the current session
意思是在当前回话中创建一个或多个全局变量,说白了就是定义一个session 变量!
接下来发现了这个:Warning:自 PHP 5.3.0 起,已经废弃此函数。强烈建议不要应用此函数 。
在此提醒,php5.2版本的同志们,千万别在直接用这个函数啦,到时候升级php时就成为麻烦啦!
如果使用了session_register函数的解决方法:
if (!function_exists('session_register'))
{
function session_register()
{
$args = func_get_args();
foreach ($args as $key){
$_SESSION[$key]=$GLOBALS[$key];
}
}
function session_is_registered($key) //检查变量是否已经存在
{
return isset($_SESSION[$key]);
}
function session_unregister($key){
unset($_SESSION[$key]);
}
}
就是重新自己定义一个session_register函数!
函数func_get_args获取函数调用是传递过来的参数的数组!
实例:
<?php
function foo($a='gg',$b='kk'){
$numargs = func_num_args(); //获取参数的个数,和实际调用foo($a='gg',$b='kk')中的参数个数一致,和函数中的默认参数无关
echo "一共传递了 $numargs 个参数<br />";
if ($numargs >= 2) {
echo "第二个参数的值是: " . func_get_arg(1) . "<br />\n"; //获取实际调用foo($a='gg',$b='kk')中的第二个参数的值
}
$arg_list = func_get_args(); //获取实际调用foo($a='gg',$b='kk')中的所有参数数组
echo "<pre>";
print_r($arg_list);
echo "</pre>";
foreach($arg_list as $key => $value):
echo $key."的值是".$value."<br>";
endforeach;
}
foo($a='gg',$b='kk');
?>
输出结果: