2014-09-24 28 views
0

我所試圖做的事:銷燬一個會話,如果它已經存在?

當用戶點擊index.php頁面(表格幾頁的開始),我需要銷燬任何現有會話和一個新的開始。這是爲了使舊的會話變量不會在新進程中重用。

我做了什麼:

我相信這應該檢查是否已經存在會話,如果它,破壞它,並開始一個新的。 (需要使用session_id()的檢查)

if(session_id() == '') { 
    session_start(); 
}else{ 
    session_destroy(); 
    session_start(); 
} 

問題:

以前的會話變量仍設置和使用過程造成的問題。

我是否錯過了重置所有會話變量的方法?

+1

見http://stackoverflow.com/questions/6249707/check-if-php-session-has-already-started一個PHP> = 5.4.0檢查活動會話的方法。您正在使用的版本將檢測PHP <5.4.0的活動會話。 – 2014-09-24 14:45:59

+0

@GeorgeCummins謝謝喬治。我最初使用了那個工作,但問題是我們的客戶使用的是舊版本。由於我使用了其中的答案將其更改爲其他較舊的PHP版本方法,因此不起作用。 – MRC 2014-09-24 14:47:51

+0

@GeorgeCummins也不要聽起來粗魯,但這就是爲什麼我寫了「(需要使用session_id()作爲檢查)」的問題。 – MRC 2014-09-24 14:50:36

回答

0

documentation你可以閱讀:

session_destroy()銷燬所有與當前 會話相關的數據。它不會取消設置任何與會話相關的全局變量,也不會取消設置會話Cookie。 session_destroy();

所以你必須做以下幾件事:

$_SESSION = array(); //empty session variable 
$cookieParams = session_get_cookie_params(); 
setcookie(
    session_name(), 
    '', 
    0, 
    $cookieParams['path'], 
    $cookieParams['domain'], 
    $cookieParams['secure'], 
    $cookieParams['httponly'] 
); 
session_destroy(); //and now you can call your function 
+0

啊,我假設「銷燬與當前會話相關的所有數據」意味着它解除了所有的一切。謝謝。現在我已經改變了它,將變量設置爲0或1,具體取決於操作是否已經執行。 – MRC 2014-09-24 14:48:39