2009-08-11 1 views
0

X 초 동안 사용하지 않으면 PHP 애플리케이션에서 사용자를 로그 아웃하는 것이 가장 좋습니다 (기본적으로 리다이렉션 만 수행). "비활성"의 경우 마지막 페이지로드 시간을 계산하고 현재 시간이 X 초 이상 벗어난 경우 리디렉션을 수행하십시오.일정 시간이 지난 후 로그 아웃

Javascript로 구현해야하는 항목입니까?

답변

6

당신은 메타 태그를 html로 사용할 수 있습니다 <meta http-equiv="refresh" content="1000;url=buy.aspx">

는 1000 초와 URL에 시간
리디렉션 할 URL을 머리에 넣어.

+0

+1 메타를 사용하면 JS로 처리 할 수 ​​있지만 일반적인 HTML을 고수 할 수 있다면 더 좋습니다! – Wookai

+0

시간은 초 단위로 지정됩니다 .. http://is.gd/2brqs – CMS

5

그냥 어제 ... this question에 답변했습니다 ... OP는 일정 시간이 지나면 로그인하려고했으나하지 않으려 고했습니다.

var minutes = 30; 
setTimeout(function(){location.href = 'logout.php';}, minutes*60*1000); 
+0

까다로운 부분은 * 비활성입니다 *. 누군가 밖으로 타이밍을내는 것은 쉽습니다 ... 그들이 앉아있는 시간에 앉아서 페이지를 읽는 것이 더 힘들고 클릭 패턴, 마우스 움직임 등과 같은 것들을 추적해야합니다. –

1

당신이 정말 어떤 이유로 리디렉션을 원하십니까 : 일반 리디렉션에 대한

어떤 확인없이, 당신은 간단한의 setTimeout 호출을 사용할 수 있습니까?

일반적으로 각 사용자 세션에는 연관된 타임 스탬프가 있습니다. 그런 다음 사용자가 세션이 만료되지 않았는지 확인하거나 로그인하도록 요청합니다. 따라서 사실상 세션이 유효하다는 것을 확인하는 것입니다.

누군가를 로그 아웃 페이지로 리디렉션하면 실제로 어떤 것도 달성하지 못합니다. 또한 세션이 서버 측 시간 초과되지 않았는지 확인해야합니다. 로그 아웃 페이지로의 리다이렉션을 포함하여 클라이언트 측의 모든 것이 신뢰할 수 없으며이를 피할 수 있습니다.

PHP의 가장 단순한 형태 : 사용자가 페이지에있는 양식에 입력을 시작하고 시간 제한 기간으로 완료되지 않았

<?php 

session_start(); 

$session_lifetime = 60*60; // 1 hour 

if (!isset($_SESSION['time']) || !$_SESSION['time']) { 
$_SESSION['time'] = time(); 
} 

if (time() - $_SESSION['time'] > $session_lifetime) { 
// session has expired 
$_SESSION['user'] = null; 
$_SESSION['time'] = null; 
} else { 
// keep session alive 
$_SESSION['time'] = time(); 
} 
1

경우는 어떻게? 지금까지 다른 답변에서 설명한 것보다 다른 방법으로 비활성을 처리합니다. 그들은에서 로그인 한 그래서으로

var rowLockSeconds = 0; 

function startRowLockTimer() 
{ 
    setInterval("incrementRowLockTimer()",60000); 
    $("input").keypress(function (e) { rowLockSeconds=0; }).click(function() { rowLockSeconds=0; }); 
    $("textarea").keypress(function (e) { rowLockSeconds=0; }).click(function() { rowLockSeconds=0; ; }); 

    window.onbeforeunload = function obul() { if (hasChanged) { return 'You will lose any unsaved changes you\'ve made.'; } } 
    window.onunload = clearRowLock; 
} 

은 행 잠금 타이머는이 시간이 초과되었습니다 있는지 확인하기 위해 간격 함수를 호출 0 60 초마다 시작됩니다.

function incrementRowLockTimer() 
{ 
rowLockSeconds = rowLockSeconds+60; 

// 10 minute timer to clear someone out of a page if there has been no activity 
if (rowLockSeconds >= 600) 
{ 
    window.onbeforeunload=null; 
    // clear rowLock with request here 
    $.get('../ajax/rowLock-server.php?do=delete&rowLockID='+currentRowLockID+'&userUUID='+currentUserUUID, function() { 
     alert('You have been logged out of this page after 10 minutes of inactivity.'); 
     document.location.href='../main.php'; 
    }); 
} 
} 

AJAX 컨트롤은 DB 행 잠금을 지 웁니다.

키는 입력 및 텍스트 영역 바인딩이므로 사용자가 양식에 아무 것도 입력하지 않으면 시간 초과가 재설정되고 10 분이 더 있습니다.

관련 문제