2014-07-24 18 views
7

Po prostu chcesz zapytać, czy możliwe jest wyczyszczenie sesji PHP za pomocą procesu jquery lub javascript? Ponieważ chcę tylko wyczyścić sesję PHP za pomocą okna dialogowego. Jeśli użytkownik kliknie przycisk "OK", przetworzy funkcję rozbrojenia. Na mojej stronie znajduje się proces realizacji transakcji, a po kliknięciu przycisku "OK" użytkownik wyświetli okno dialogowe, a jeśli użytkownik kliknie przycisk "OK", anuluje sesję PHP i zostanie przekierowany na inną stronę.Jak wyczyścić sesję PHP za pomocą Jquery/Javascript?

Oto mój prosty kod:

<i class="fa fa-check"></i> <span id="save_registry" class="cursor: pointer">OK</span> 

<div id="save_alert" style="display: none"> 
    <?php unset($this->session->data['cart']); 
</div> 


.... 

$('#save_registry').click(function(){ 

     $('#save_alert').dialog({ 
      modal: true, 
      buttons: { 
       Ok: function() { 
        $(this).dialog("close"); 
        location = 'index.php?route=common/home'; 
       } 
      } 
     }); 

}); 
+0

Możesz usunąć plik cookie sesji. Aby jednak poprawnie się wylogować, trzeba wykonać wywołanie ajax, aby skrypt PHP mógł wyczyścić zmienną '$ _SESSION' i odpowiednio wygaśnić plik cookie, aby zapobiec przechwyceniu sesji. – War10ck

Odpowiedz

10

Mówiąc wprost: Nie możesz, bezpośrednio.

PHP jest server-side język podczas JavaScript jest stronie klienta jeden, co oznacza, że ​​nie ma innego połączenia między nimi inne niż dokumencie otrzymanym i współdziała ze sobą. Sesje są przechowywane i zarządzane przez serwer .

Możesz jednak, jak sugeruje War10ck, wywołać skrypt po stronie serwera, który wyczyści sesję. Coś takiego:

PHP:

<?php 
    /* 
    * session_start(); 
    * Starting a new session before clearing it 
    * assures you all $_SESSION vars are cleared 
    * correctly, but it's not strictly necessary. 
    */ 
    session_destroy(); 
    session_unset(); 
    header('Location: continue.php'); 
    /* Or whatever document you want to show afterwards */ 
?> 

HTML/javascript:

<script type="text/javascript"> 
    function logout() { 
     document.location = 'logout.php'; 
    } 
    LogoutButton.addEventListener('click', logout, false); 
</script> 

<button id="LogoutButton">Log out</button> 

Albo nawet wykonywania asynchronicznego połączenia:

function logout() { 
    var xhr = new XMLHttpRequest(); 
    xhr.onload = function() { 
     document.location = 'continue.php'; 
    } 
    xhr.open('GET', 'logout.php', true); 
    xhr.send(); 
} 
+0

Dzięki za wyjaśnienie. To naprawdę pomaga mi w zrozumieniu sesji. :) Spróbuję twoich sugestii. Wielkie dzięki!:) – Jerielle

4

istnieje sposób można to zrobić bezpośrednio z javascript ... najpierw musisz zadeklarować funkcję, która usuwa plik cookie według klucza

function removeCookie(cookieName) 
{ 
    cookieValue = ""; 
    cookieLifetime = -1; 
    var date = new Date(); 
    date.setTime(date.getTime()+(cookieLifetime*24*60*60*1000)); 
    var expires = "; expires="+date.toGMTString(); 
    document.cookie = cookieName+"="+JSON.stringify(cookieValue)+expires+"; path=/"; 
} 

Teraz wszystko co musisz zrobić, to usunąć pliki cookie z kluczem „PHPSESSID” jak ten

removeCookie("PHPSESSID"); 

Teraz kiedy var_dump($_SESSION) go znaleźć pustą tablicę

+0

Zwróć uwagę, że javascript nie jest ** bezpośrednio ** usuwa sesję: klient odczytuje plik cookie, unieważnia go i wysyła odpowiednie informacje do serwera, który następnie odpowiednio wygasa sesję. +1 dla alternatywnego rozwiązania. – arielnmz

3

Nie możesz wyczyść sesję php przy użyciu JavaScript bezpośrednio.

PHP jest językiem po stronie serwera, natomiast JavaScript jest po stronie klienta ..

można jednak rzucać ajax żądania do określonej strony, która obsługuje zniszczenie.

Jak to:

// Client-side 
$.post("logout.php", {"can_logout" : true}, function(data){ 

    if(data.can_logout) 
     // redirect the user somewhere 
}, "json"); 


<?php 
    // Server-side 
    $can_logout = $_POST["can_logout"]; 

    if($can_logout) 
    session_destroy(); 

    echo json_encode(array("can_logout" => true)); 
?> 

Albo po prostu skierować użytkownika do jakiejś strony, która obsługuje zniszczenia sesji; tj. logout.php

Powiązane problemy