2017-02-09 1 views
1

사용자 로그인 & 로그 아웃을 위해 세션을 사용 중입니다. 30 분 동안 사용자가 활동하지 않으면 자동으로 로그 아웃해야한다는 요구 사항이 있습니다. & 몇 가지 솔루션을 시도했지만 작동하지 않았다. 나는 솔루션 아래 시도 :30 분 동안 사용하지 않으면 어떻게 사용자가 로그 아웃하나요?

Solution1 : Solution2

if(time() - $_SESSION['timestamp'] > 900) { //subtract new timestamp from the old one 
    echo"<script>alert('15 Minutes over!');</script>"; 
    unset($_SESSION['email'], $_SESSION['user_id'], $_SESSION['timestamp']); 
    session_destroy(); 
    $_SESSION['logged_in'] = false; 
    header("Location: " . index.php); //redirect to index.php 
    exit; 
} else { 
    $_SESSION['timestamp'] = time(); //set new timestamp 
} 

: 나도 그들 중

function auto_logout($field) 
{ 
    $t = time(); 
    $t0 = $_SESSION[$field]; 
    $diff = $t - $t0; 
    if ($diff > 3000 || !isset($t0)) 
    {   
    return true; 
    } 
    else 
    { 
    $_SESSION[$field] = time(); 
    } 
} 
if(auto_logout("email")) 
{ 
    session_unset(); 
    session_destroy(); 
    header('Location: index.php'); 
    exit; 
} 

이 일이 어느 한 사용자의 마지막 활동을 추적하고와 시간을 확인하는 방법을 말해 주 시겠어요 현재 시간이 30 분을 초과하면 해당 사용자가 로그 아웃합니까?

+0

당신은이 – Jer

+0

첫째, 감사를 위해'$ 아약스()를'사용할 수 있습니다 귀하의 빠른 회신, 당신은 코드로 그 일을 어떻게 말해 줄 수 plz. –

답변

0

난이 도움이 될 수있을 것 같다고 생각 : How do I expire a PHP session after 30 minutes?

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { 
// last request was more than 30 minutes ago 
session_unset();  // unset $_SESSION variable for the run-time 
session_destroy(); // destroy session data in storage 
} 
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp 
+0

이 코드를 "헤더"(또는)에 삽입해야 어디에서이 코드를 작성할 수 있습니까? $ _SESSION [ 'user_id'] & $ _SESSION [ 'email'] 로그인 후 "$ _SESSION [ 'LAST_ACTIVITY']"에 대한 세션을 설정해야합니까? –

+0

실제로 이것은 '해결책 1'과 거의 같습니다. 지난 몇 년 동안 PHP를 많이 사용하지는 않았지만 세션을 끝내면 (session_unset), [mail] 및 [user_id] 결국 끝날거야. – DevMoutarde

+0

[ 'LAST_ACTIVITY']은 (는) 일반적인 이름이며, 원하는 이름으로 지정할 수 있습니다 (예 : '예'와 같은 '타임 스탬프'). 새로 고침하고 시간 초과 값과 비교하면됩니다. – DevMoutarde

0

활동을 찾으려면 아래와 같이 자바 스크립트를 사용하고 로그 아웃 페이지로 리디렉션하여 세션을 지울 수 있습니다. 여기에 내가 활동의 5 초를 넣어

var t; 
 
    window.onload = resetTimer(); 
 
    // DOM Events 
 
    document.onmousemove = resetTimer(); 
 
    document.onkeypress = resetTimer(); 
 
    console.log('loaded'); 
 

 
function logout() { 
 
     alert("You are now logged out.") 
 
     //location.href = 'logout.php' 
 
    } 
 

 
    function resetTimer() { 
 
\t \t 
 
     clearTimeout(t); 
 
     t = setTimeout(logout, 5000) 
 
     
 
    }

+0

감사합니다 Azeez,이 코드를 어디에 넣으시겠습니까? $ (document) .ready() 함수에 있습니까? –

+0

$ (document) .ready()가 필요 없습니다. 이 을 넣을 수 있습니다. 귀하의 헤더 파일에 넣어 모든 페이지에 나타납니다. –

+0

나는 또한 당신의 코드를 이해하고 답장을합니다, 나는 또한 확실히 작동 할 것이라고 생각합니다. 그러나 나는 PHP를 사용하기 때문에 다른 답변이 저를 위해 일하는 것을 발견했습니다. 자바 스크립트 코드를 포함 할 필요가 없음을 의미합니다. 어쨌든 귀하의 회신을 보내 주셔서 감사합니다. –

관련 문제