2014-07-24 3 views
7

Voglio solo chiedere se è possibile cancellare una sessione PHP usando un processo jquery o javascript? Perché quello che voglio fare è cancellare la sessione PHP usando una finestra di dialogo. Se l'utente fa clic sul pulsante "OK", elaborerà la funzione unset. Nella mia pagina c'è un processo di checkout e dopo che l'utente fa clic sul pulsante 'OK', verrà visualizzata una finestra di dialogo e se l'utente fa clic sul pulsante 'OK' disattiverà la sessione PHP e verrà reindirizzata a un'altra pagina.Come cancellare una sessione PHP usando Jquery/Javascript?

Ecco il mio codice semplice:

<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

È possibile eliminare il cookie di sessione. Tuttavia, per effettuare correttamente il logout è necessario effettuare una chiamata ajax in modo che lo script PHP possa cancellare la variabile '$ _SESSION' e scadere correttamente il cookie per impedire il dirottamento di sessione. – War10ck

risposta

10

In poche parole: non è possibile, direttamente.

PHP è un linguaggio dilato server, mentre JavaScript è un lato client uno, il che significa che non c'è nessun altro collegamento tra di loro, tranne il documento si riceve e interagisce con voi. Le sessioni vengono archiviate e gestite dal server .

Tuttavia, come suggerisce War10ck, è possibile chiamare uno script sul lato server che cancella la sessione. Qualcosa di simile a questo:

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> 

O anche l'esecuzione di una chiamata asincrona:

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

Grazie per la spiegazione. Mi aiuta davvero a capire la sessione. :) Proverò i tuoi suggerimenti. Molte grazie!:) – Jerielle

4

C'è un modo si può fare direttamente da javascript ... prima devi dichiarare una funzione che cancella un cookie con la sua chiave

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=/"; 
} 

Ora tutto ciò che dovete fare è quello di rimuovere un cookie con il tasto "PHPSESSID" come questo

removeCookie("PHPSESSID"); 

Ora, quando si var_dump($_SESSION) a trovarlo array vuoto

+0

Si noti che javascript non è ** direttamente ** rimuovendo la sessione: il client legge il cookie, lo invalida e invia le informazioni corrette al server, che quindi scade di conseguenza. +1 per la soluzione alternativa. – arielnmz

3

Non è possibile cancella una sessione php usando direttamente Javascript.

PHP è un linguaggio lato server, mentre Javascript è sul lato client ..

Tuttavia, si può buttare una richiesta AJAX alla pagina specificata che gestisce la distruzione.

Ti piace questa:

// 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)); 
?> 

O semplicemente puntare l'utente a qualche pagina che gestisce la distruzione della sessione; Ad esempio logout.php