2012-05-22 5 views
2

세션이 만료되면 경고를 표시하도록 내 페이지를 원합니다. 스택을 검색하여 찾았습니다. MVC with JQuery: handling Session Expire세션 만료 된 메시지 표시

이 멋진 링크는 세션을 유지하는 방법을 설명합니다. 그러나 문제는 타이머를 사용한다는 것입니다. 제 상황에서는 사용자가 시스템을 절전 모드로 유지하여 웹 페이지를 열어 두는 것이 가능합니다. 이 경우 타이머가 작동을 멈 춥니 다. 프레이즈는 시스템이 절전 모드로 전환 된 후 절전 모드로 전환 될 때 세션이 만료되었음을 내 코드에서 알 수 있도록 방법을 제안합니다.

+0

타이머를 사용하여 페이지로드와 현재 시간의 차이를 확인하려고 했습니까? –

답변

2

모든 브라우저와 모든 플랫폼에서 이와 같은 작업을 수행하는 유일한 방법은 폴링을 사용하는 것입니다. 당신은 자바 스크립트 setInterval을 사용하여 ajax를 자주 호출합니다. 시간 간격을 서버 시간 초과보다 낮게 설정하면 세션을 갱신하고 만료되지 않습니다. 서버 시간 제한 시간보다 길게 설정하면 실제로 만료되었는지 클라이언트에게 알립니다.

0

세션 종료 정보를 설정하기 위해 php에서 브라우저로 세션 쿠키를 저장하는 것이 일반적입니다. 서버 측에서 만료 정보는 db에 저장됩니다. 모든 사용자 요청에서 서버는 쿠키와 데이터베이스를 업데이트합니다. jquery 쿠키 플러그인을 사용하면 세션이 만료 될 때 확인할 수 있습니다. 다른 사람들이 세션이 만료 될 때까지 타이머 이벤트를 설정할 것을 제안하는 것과 같이 폴링 (풀링이 아닌)을 통해이를 수행 할 수 있습니다.

편집은 내가 일하고 있어요 유사한 응용 프로그램이 있습니다. 여기에 내가 무슨 짓을 : PHP에서 내가 클라이언트 측이 jQuery 플러그인을 사용하여 다음 쿠키

$exp_gmt = gmdate("D, d M Y H:i:s", time() + $this->allowcache_expire * 60)." GMT"; 
header("Expires: ".$exp_gmt); 
header("Cache-Control: max-age=".$this->allowcache_expire * 60, false); 

을 설정 모든 아약스 요청에

jQuery.cookie = function(d, e, b) { 
    if(arguments.length > 1 && String(e) !== "[object Object]") { 
     b = jQuery.extend({}, b); 
     if(e === null || e === undefined) { 
      b.expires = -1 
     } 
     if(typeof b.expires === "number") { 
      var g = b.expires, c = b.expires = new Date(); 
      c.setSeconds(c.getSeconds() + g) 
     } 
     e = String(e); 
     return (document.cookie = [encodeURIComponent(d), "=", b.raw ? e : encodeURIComponent(e), b.expires ? "; expires=" + b.expires.toUTCString() : "", b.path ? "; path=" + b.path : "", b.domain ? "; domain=" + b.domain : "", b.secure ? "; secure" : ""].join("")) 
    } 
    b = e || {}; 
    var a, f = b.raw ? function(h) { 
     return h 
    } : decodeURIComponent; 
    return (a = new RegExp("(?:^|;)" + encodeURIComponent(d) + "=([^;]*)").exec(document.cookie)) ? f(a[1]) : null 
}; 
(나는 그것을 발견 한 곳 미안 해요 기억이 안나요)

showTime : function() { 
    var today = new Date(); 
    var curr_date = today.getDate(); 
    var curr_month = today.getMonth() + 1; 
    var curr_year = today.getFullYear(); 
    var curr_hour = today.getHours(); 
    var curr_min = today.getMinutes(); 
    var curr_sec = today.getSeconds(); 
    if(curr_date < 10) 
     curr_date = '0' + curr_date; 
    if(curr_month < 10) 
     curr_month = '0' + curr_month; 
    if(curr_hour < 10) 
     curr_hour = '0' + curr_hour; 
    if(curr_min < 10) 
     curr_min = '0' + curr_min; 
    if(curr_sec < 10) 
     curr_sec = '0' + curr_sec; 
    var curr_full = curr_date + "/" + curr_month + "/" + curr_year + "<br />" + curr_hour + ":" + curr_min + ' <span style="font-size:0.8em">' + curr_sec + '</span>'; 
    $('#clock').html(curr_full); 
    setTimeout("showTime()", 1000); 
} 

시계 기능의 끝에서 당신이 쿠키를 읽고이 만료되어 있는지 확인하기 위해 현재 시간과 비교 할 수 있습니다

또한 나는 페이지에 시계가있다.

+0

당신은 폴링을 의미하지만, 나는 추측하지 못합니다. :) – koenpeters

+0

xaxaxa !!! 네!!! 나는 그것을 분명히했다! – Johntor

+0

@Johntor, 시스템이 절전 모드로 전환되면 타이머가 멈 춥니 다. 세션이 만료되면 깨우면 세션이 만료되었다는 경고를 사용자에게 표시 할 수 있습니까? – Coder