JavaScript를 사용하여 메타 태그를 재설정하여 페이지를 새로 고치지 않도록합니다.

StackOverflow https://stackoverflow.com/questions/2210077

문제

Ajax 컨텐츠가 풍부한 페이지를 가진 레거시 응용 프로그램 (클래식 ASP 및 ASP.NET의 혼합)이 있습니다. 기대는 사이트 사용자가 페이지에서 상당한 시간에 걸쳐있는 일련의 작업을 수행 할 수 있다는 것입니다. 15-30 분.

요구 사항 중 하나는 사이트에 로그인하는 사용자가 15 분의 비 활동 후 자동으로 로그 아웃해야한다는 것입니다. 이는 현재 페이지에서 15 분 동안 활동하지 않은 후 사용자를 로그 아웃 페이지로 리디렉션하기 위해 메타 태그를 사용하여 달성되고 있습니다.

<meta name='Refresh' http-equiv="Refresh" content="900;URL=/someurl/logout.asp">

우리가 가진 문제는 브라우저가 서버와 많은 ajax 상호 작용에도 불구하고 페이지에 활동이 있다고 생각하지 않는다는 것입니다. 따라서 브라우저가 무 활동으로 생각하는 15 분 후에 사용자는 무언가를하는 중에도 자동으로 로그 아웃됩니다.

이것에 영감을 받았습니다 게시판 게시물 우리는 JavaScript (jQuery)를 사용하여 성가심을 고치려고 노력했습니다.

아래는 페이지 저장을 클릭하는 것과 같은 이벤트 핸들러입니다.

$(document).ready(function() {
    var selector = 'meta[name=Refresh]';
    var content = $(selector).attr("content"); //"900;URL=/someurl/logout.asp"
    $(selector).attr("content", "5;URL=/someurl/logout.asp"); 
});

의도 (Re) 메타 태그 내용 설정 페이지 새로 고침 타이머가 재설정됩니다. 불행히도 이것은 작동하지 않는 것 같습니다 (즉).

이것은 레거시 응용 프로그램이므로 메타 태그 등을 사용하기위한 일부 결정 중 일부가 구워졌습니다. 문제는 AJAX 응용 프로그램과 평화롭게 공동 존재하도록 메타 태그 새로 고침을 얻는 방법이 있습니까? 내가 뭔가 잘못하고 있고이 문제를 해결할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

jQuery를 사용한다고 가정하면 이와 같은 것이 효과가있을 수 있습니다. 테스트하지 않았으며 브라우저가 문서 헤드의 NOSCRIPT 요소 내에서 A 메타 태그를 읽을 것인지 모릅니다.

메타 태그를 이것으로 바꾸십시오.

<script type="text/javascript">
    window.onload = function(){
        var timer = null,
            time=1000*60*15, // 15 minutes
            checker = function(){
                if(timer){clearTimeout(timer);} // cancels the countdown.
                timer=setTimeout(function() { 
                    document.location="/someurl/logout.asp";
                },time); // reinitiates the countdown.
            };
        checker(); // initiates the countdown.
        // requires jQuery... (you could roll your own jQueryless version pretty easily though)
        if(window.jQuery){
            // bind the checker function to user events.
            jQuery(document).bind("mousemove keypress click", checker);
        }
    };
</script>
<noscript>
    <meta name="Refresh" http-equiv="Refresh" content="900;URL=/someurl/logout.asp">
</noscript>

이 작업을 수행하는 더 좋은 방법이 있습니다. 2 페이지에 서비스를 제공하는 것과 같습니다 ... 하나는 JavaScript를 가진 사용자와 하나가없는 사용자를위한 것입니다.

또는 JavaScript가없는 사람들의 앱을 비활성화하십시오. :영형)

편집하다이 페이지에 따르면 : http://www.google.com/support/forum/p/webmasters/thread?tid=25c023fea40a4&hl=en 메타 새로 고침은 노스 스크립트 요소 내부에서 작동해야합니다.

다른 팁

메타 새로 고침을 멈출 수있는 방법이 없다고 생각합니다. 메타 태그를 변경할 수는 있지만 브라우저는 이미 15 분 안에 새로 고침 될 것이라고 결정했습니다. 그것을 막을 API가 없습니다.

새로 고침을 멈출 수 없거나 JavaScript를 사용하여 리디렉션을 수행 할 수 있다면 손상을 포함 할 수 있습니다.

$(window).unload(function() { 
  // Insert code here 
  // to save the user's work.
  alert('Sorry, you have to log out now.')
}); 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top