2014-07-24 46 views
7

只想問是否可以使用jquery或javascript過程來清除PHP會話?因爲我想要做的是使用對話框清除PHP會話。如果用戶點擊「確定」按鈕,它將處理未設置的功能。在我的頁面中有一個結帳過程,在用戶點擊'確定'按鈕後,它會提示一個對話框,如果用戶點擊'確定'按鈕,它將取消設置PHP會話,並將其重定向到另一個頁面。如何使用Jquery/Javascript清除PHP會話?

這裏是我的簡單的代碼:

<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

你可以刪除會話cookie。但是,要正確註銷,您需要進行ajax調用,以便您的PHP腳本可以清除「$ _SESSION」變量,並正確過期cookie以防止會話劫持。 – War10ck

回答

10

簡單地說:你不能,直接

PHP是一種服務器端語言,而JavaScript是一種客戶端之一,這意味着它們之間除了收到文件沒有其他的連接,並與您互動。會話由服務器存儲和管理。

然而,您可以像War10ck建議的那樣,調用清除會話的服務器端腳本。事情是這樣的:

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> 

甚至執行異步調用:

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

感謝您的解釋。它真的幫助我理解會議。 :)我會嘗試你的建議。非常感謝!:) – Jerielle

4

有一種方法可以做到這一點直接從JavaScript ...首先你必須聲明一個函數,清除一個cookie的密鑰

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

現在,所有你需要做的就是刪除Cookie與鍵「PHPSESSID」像這樣

removeCookie("PHPSESSID"); 

現在,當你var_dump($_SESSION)你找到它空數組

+0

請注意,JavaScript不直接**刪除會話:客戶端讀取cookie,使其無效並將正確的信息發送到服務器,然後相應地過期會話。 +1替代解決方案。 – arielnmz

3

你不能直接用Javascript清除一個php會話。

PHP是一個服務器端語言,而JavaScript是客戶端..

然而,你可以拋出一個Ajax請求到指定的頁面處理的破壞。

像這樣:

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

或者只是指向用戶頁面的一些處理該會話的破壞;即logout.php