2012-06-07 2 views
1
내가 PHP 세션에 대한 많은 스레드가 알고

동안 아약스 쿼리 등 ... 하지만 내 문제는,PHP 세션 타임 아웃

나는 아약스 그리드 (페이지로드 후 빌드)이있는 사용이 로그온 된 경우에만 편집 할 수 있습니다. 사용자가 실제로 페이지를 변경 (valid_session.php라고 부름) 할 때까지 세션을 확인하지 않아도되지만, 다음 날 사용자가 다음 페이지에서 브라우저를 열면 문제가 발생합니다. 그리드는 여전히 편집 가능합니다! 분명히 페이지를 새로 고치면 사용자가 로그 아웃됩니다.

내 페이지에는 캐시가 설정되어 있지 않지만 브라우저 (특히 크롬)는 열 때 해당 페이지를 다시로드하지 않습니다.

다시 열 때 강제로 새로 고치는 방법을 고집 할 수는 없습니다.

BTW


편집 ... 올바른 방향으로 나를 인도 해주십시오 -이 처리 할 수있는 방법을 발견했다. 나는 단순히 $.get()를 통해 unload()session_destroy.phpsession_destroy(); 전화 :

$(window).unload(function() { 
    $.get('session_destroy.php', function(data) { 
     alert(data); // alerts me of some var set to 0 - meaning session is destroyed. 
    }); 
}); 
+0

사용자가 동일한 페이지에서 브라우저를 열 것이라고 말하면 어떻게됩니까? 책갈피입니까? 기본 홈 페이지? 고정 된 탭이 있습니까? – gunnx

+0

알 수 있습니까? 같은 탭으로 다시 열 수 있습니까? – Elen

답변

1

하나의 해결 방법은 "마지막 새로 고침 "쿠키를 사용하고 쿠키가 예를 들어 20 분 이상 경과했는지 확인하는 javascript setInterval()이 있어야합니다. 그렇다면 자바 스크립트가 새로 고침을 트리거합니다. 물론 비활성 기간이 지난 후에도 로그 아웃해야합니다.

+0

하지만 사용자가 저장하지 않은 모든 변경 사항을 잃어 버릴 수도 있습니다. – Elen

+0

@Elen 세션이 만료되고 저장되지 않은 변경 사항이 손실되었다고 사용자에게 알리면 정중하고 사용자가 불편 함을 느끼지 않을 것입니다. – Leri

+0

브라우저를 닫거나 20 분 동안 아무 것도 변경하지 않은 경우 저장하지 않은 작업이 없을 것입니다. 'setInterval()'은 "last refresh"쿠키를 현재 시간으로 재설정 할 수도 있습니다. 즉, 브라우저가 20 분 동안 닫힌 경우에만 시간 초과됩니다. –

2

은 사용자가 로그 아웃하기 위해 적극적으로 내가 폴링 어떤 종류의 작업을 수행 한 후 세션이 만료되면 자동으로 로그 아웃을 유발한다고 생각합니다. 또는 "세션이 만료되면이 페이지에 대한 변경 사항이 저장되지 않습니다."와 같은 오류 메시지를 인쇄하십시오. 분명히 그리드가 세션이 만료되었다는 "마술에 의한"지금, 당신은 어떻게 든 그것을 말해야합니다. 어떤 경우에도 그리드가 여전히 편집 가능하더라도 변경 사항을 저장하는 것은 불가능합니다. 그렇지 않으면 사용자가 저장하기 전에 로그인했는지 확인하지 않는 것과 같은 설계상의 결함이 있습니다.

+0

하지만 그게 내 요점이다. 그리드가 열려있는 동안 편집 가능한 상태로 있어도 상관 없다. 일단 닫으면 - 열어서 다시 불러 와서 편집 할 수 없게하고 싶습니다. 아니면 불가능하다고 말하고 이전에 사용자를 로그 아웃해야합니까? – Elen