2014-07-24 4 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

세션 쿠키를 삭제할 수 있습니다. 그러나 제대로 로그 아웃하려면 PHP 스크립트가'$ _SESSION' 변수를 지우고 세션 하이재킹을 막기 위해 쿠키를 만료시킬 수 있도록 ajax 호출을해야합니다. – War10ck

답변

10

간단하게 말해서 :

여기 내 간단한 코드입니다 당신은 할 수 없습니다, 직접. 자바 스크립트는 사용자가 수신 문서 이외의 다른 그들 사이에 다른 연결이 없다는 것을 의미합니다 당신과 함께 상호 작용하는 클라이언트 측 한 동안

PHP는 서버 측 언어입니다. 세션은 서버에 의해 저장되고 관리됩니다.

그러나 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/자바 스크립트 :

<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에서 직접 ... 먼저 쿠키를 지우는 함수를 선언해야합니다.

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

지금 당신이해야 할 모든 당신이 var_dump($_SESSION) 당신이 그것을 빈 배열을 찾을 때 지금이

removeCookie("PHPSESSID"); 

같은 키 "PHPSESSID"로 쿠키를 제거하는 것입니다

+0

javascript는 ** 세션을 직접 제거하는 ** 것이 아니라 클라이언트가 쿠키를 읽고 무효화 한 다음 적절한 정보를 서버에 보내면 그에 따라 세션이 만료됩니다. +1 대안. – arielnmz

3

당신은 할 수 없습니다 Javascript를 직접 사용하여 PHP 세션을 지 웁니다. 자바 스크립트가 클라이언트 측 반면

PHP는 파괴를 처리하는 지정된 페이지에 아약스 요청을 던질 수 .. 그러나

서버 측 언어입니다. 이처럼

:

// 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

관련 문제