我在我的服務器(php 5.4.0,apache)上發現了一個關於php中會話處理的奇怪問題。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/....
我在想什麼或做錯了什麼?
在此先感謝
丹尼斯