2016-08-30 5 views
1

У меня возникли проблемы с уничтожением сеанса для выхода из системы. Когда я уничтожаю сессию, она продолжает возвращаться.Бессмертный сеанс PHP

код я использую выглядит следующим образом:

public function kill_login(){ 
    global $response; 
    session_start(); 
    $response->message = "Current session" . json_encode($_SESSION); 
    // Unset all of the session variables. 
    unset($_SESSION); 
    $_SESSION = array(); 
    if (ini_get("session.use_cookies")) { 
     $params = session_get_cookie_params(); 
     setcookie(session_name(), '', time() - 42000, 
      $params["path"], $params["domain"], 
      $params["secure"], $params["httponly"] 
     ); 
    } 
    session_destroy(); 
    session_write_close(); 

    $response->message .= "Session Destroyed" . json_encode($_SESSION); 
} 

Он отвечает ниже

Returning Session

Это называется с ASync AJAX запрос затем перезагружает

$("<button>").text("Logout").click(function(){ 
    var logOut = { 
     action:"logOut" 
    }; 
    alert(SAJAX.getJSON(logOut,dataLoc).message); 
    location.reload(); 
}) 

(SAJAX.getJSON - это просто метод, который упрощает использование AJAX для стандартный запрос на мой, я использую его очень хорошо)

Затем страница перезагружается и, как-то сеанс все еще существует, я могу снова нажать кнопку выхода и все равно получить то же самое.

У меня только session_start() используется в трех местах: проверка входа (устанавливает сеанс для страницы), вход в систему и уничтожение логина, поскольку это запрос AJAX.

Любые идеи ??

Редактировать: я скорректировал его, чтобы удалить второй session_start() и добавить write_close те же результаты.

+3

Вы начали сеанс, затем вы его уничтожили, а затем снова запустили. Есть проблема. –

+0

Вы начинаете сеанс на той же странице, где вы его отключили. – Phiter

+1

Плюс, вы только начинаете сеанс, как только вызывается эта функция. Поместите 'session_start();' в качестве первой строки, * n'est-ce pas? * –

ответ

0

Проблема заключается не в PHP, а в вызове location.reload();, который будет повторно отправлять данные POST. Поскольку страница была немедленно отправлена ​​на страницу входа в систему, сеанс был уничтожен в результате выхода из системы, тогда был создан новый сеанс из-за POST на страницу, которая повторно инициирует метод входа.

Изменение location.reload() до window.location.href = "logon.php"; решает проблему, поскольку страница больше не отправляется данными POST.

Смежные вопросы