【发布时间】:2016-08-25 11:57:15
【问题描述】:
我在我的服务器(php 5.4.0,apache)上发现了一个关于 php 会话处理的奇怪问题。
我有一个启动会话的函数,该会话包含以下代码,并且总是在我的应用程序中的任何其他内容之前调用:
static function startSession()
{
$httponly = true;
$secure = true;
if (ini_set('session.use_only_cookies', 1) === FALSE) {
exit();
}
session_name("my_session");
$cookieParams = session_get_cookie_params();
session_set_cookie_params(
60*60,
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly
);
session_start();
}
然后有一个登录过程,它会做类似的事情:
$_SESSION['key1] = 'some value';
session_regenerate_id(true);
最后还有注销功能:
static function logout()
{
$_SESSION = array();
$params = session_get_cookie_params();
setcookie(
session_name(),
'',
time() - 42000,
$params["path"],
$params["domain"],
$params["secure"],
$params["httponly"]
);
return session_destroy();
}
现在的问题: 当我登录时会发生以下情况:
startSession();
...
$_SESSION['key1'] = 'some_value';
...
将来我会以某种方式调用:
logout();
session_destroy();返回 true,$_SESSION 被重置。一切都很好。
然后我通过再次发送会话 cookie 以请求一些信息来重新测试请求,并且会话再次处于活动状态。所有的信息都在那里。
在服务器上我可以看到生成的会话文件:
sess_ : 394B
我有以下会话设置:
ini_set('session.hash_function', 'sha512');
ini_set('session.entropy_file', '/dev/urandom');
ini_set('session.entropy_length', 256);
ini_set('session.use_trans_sid', 0);
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_lifetime', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.cache_limiter', 'nocache');
我的 session_save_path() 位于 /var/www/html/sites/....
我错过了什么或做错了什么?
提前致谢
丹尼斯
【问题讨论】: