2016-08-25 89 views
0

我在我的服務器(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/....

我在想什麼或做錯了什麼?

在此先感謝

丹尼斯

回答

0

好吧,我找到了解決辦法嘍。 我應該補充說,我使用目標c從iOS發送請求。

對於我發送cookie請求的所有請求。

問題是,註銷沒有發送cookie。所以我要求註銷功能。正如所說的所有請求開始一個會話。然後我重置會話並銷燬它。

這意味着: 要求登錄 - 生成會話:ABC123 要求註銷 - 產生新的會話:xyz456 - 退出會議xyz456 - ABC123撐登錄

所以我的建議是,一定要銷燬。右會話:)