저는 PHP 응용 프로그램에서 작업하고 있지만 사실 사용자가 로그 아웃하고 브라우저의 뒤로 버튼을 로그 아웃 한 후를 누르면 이전 페이지를 볼 수있는 것처럼 문제가 있습니다. 세션이 파괴되지 않은 : ((나는 여기 웹에서 찾은 모든 것을 시도했지만 작동하지 않습니다 '(로그 아웃 후 이전 페이지를 표시하지 못하게합니다.
나는 뒤로 버튼을 비활성화 할 수 있습니다
저는 PHP 응용 프로그램에서 작업하고 있지만 사실 사용자가 로그 아웃하고 브라우저의 뒤로 버튼을 로그 아웃 한 후를 누르면 이전 페이지를 볼 수있는 것처럼 문제가 있습니다. 세션이 파괴되지 않은 : ((나는 여기 웹에서 찾은 모든 것을 시도했지만 작동하지 않습니다 '(로그 아웃 후 이전 페이지를 표시하지 못하게합니다.
나는 뒤로 버튼을 비활성화 할 수 있습니다
당신은 뒤로 버튼을 비활성화 할 수 없습니다? 사용자의 브라우저에서 오버라이드 할 수없는 브라우저의 기본 기능입니다.
애플리케이션이 깨지도록 만들 수 있습니다 (disp 사용자가 다시 시작해야하거나 요청을 다시 제출해야한다는 오류 메시지가 표시됨). 응용 프로그램을 디자인 할 때 뒤로 버튼을 고려하지 않았다는 사실을 인정하기 때문에 이렇게하는 것은 좋지 않습니다. 모든 응용 프로그램, 주문 양식, 쇼핑 카트 등, 올바르게 설계된 경우 뒤로 버튼을 사용할 수 있어야합니다.
내가 뒤로 버튼 사용을 깨뜨린 것에 대한 한 가지 접근법은 응용 프로그램 내의 모든 URL과 모든 양식 내에서 토큰을 전달하는 것입니다. 토큰은 모든 페이지에서 다시 생성되며 사용자가 새 페이지를로드하면 이전 페이지의 토큰이 무효화됩니다.
사용자가 페이지를로드 할 때 올바른 토큰 (이전 페이지의 모든 링크/양식에 지정된)이 전달 된 경우에만 페이지가 표시됩니다.
은행에서 제공하는 온라인 뱅킹 응용 프로그램은 이와 같습니다. 뒤로 버튼을 전혀 사용하지 않으면 링크가 더 이상 작동하지 않으며 더 이상 페이지를 다시로드 할 수 없습니다. 다시 돌아갈 수 없다는 알림이 표시되고 다시 시작해야합니다.
즉, 사용자가 돌아 가면 응용 프로그램이 중단되므로 응용 프로그램 디자인이 좋지 않다고 생각합니다.
질문을 다루기 시작하지 않습니다. – aaronasterling
사용자의 캐시/세션을 지우시겠습니까? 그들이 다시 치기는하지만 로그 아웃시 세션을 지우면 로그인 상태를 유지해야한다고 생각하지 않습니다.
뒤로 버튼을 비활성화 할 수 없습니다. 이전에 로그 아웃 한 사용자의 페이지를 볼 수 있으면 세션 확인 스크립트가 어딘가에 실패합니다. 로그 아웃 양식을 제출하고 현재 로그 아웃 한 사용자를 기본 페이지로 리디렉션 할 때 프로세스 스크립트를 사용하십시오 (적용 가능한 경우).
수 없습니다. 브라우저는 페이지를 캐싱 할 때마다 웹 서버에서 페이지를 요청할 필요가 없도록 페이지를 캐시합니다. 뒤로 버튼을 누르면 서버에 묻지 않고 마지막 페이지가로드됩니다.
각 페이지 요청에서 다시 보내는 캐싱 헤더와 관련이 있습니다. 짧은 시간 동안 만 유효한 컨텐츠가 있으므로 브라우저에서 로컬로 캐시하지 않도록 페이지를 생성 할 때 헤더를 다시 보내야합니다.여기 http://www.w3schools.com/php/func_http_header.asp를 페이지 캐싱을 사용하지 않도록 설정의
예 :
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
http://blog.priyakant.com/2014/09/23/browser-back-button-prevent/
요약 :
브라우저 뒤로 버튼 - 9 월에 게시 쿠키 기반의 접근 방식 - 로그 아웃 한 후 이전 페이지의 표시 방지 Priyakant Patel의 2020 년 23 월 23 일 - 코멘트 남기기 로그 아웃 후 이전 페이지 표시 방지
성능상의 이유로 클라이언트 브라우저 응용 프로그램 페이지를 캐시합니다. 이 경우 사용자가 뒤로 (브라우저 뒤로 버튼)을 클릭하면 캐시의 이전 페이지가 표시됩니다.
사례 1 : 사용자는 여전히에 기록됩니다
는 이전 페이지의 내용을 표시하는 OK입니다..
사례 2 : 사용자가 로그 아웃되었습니다.
잠재적으로 다음 사용자는 브라우저의 뒤로 버튼을 클릭 할 수 있으며 이전 페이지의 내용을 볼 수 있습니다.
많은 응용 프로그램에서 큰 문제가 될 수 있습니다. 금융 애플리케이션에서 다음 잠재 고객은 재무 데이터를 볼 수 있습니다. 또는 의료/환자 관련 응용 프로그램이 HIPAA 위반 일 수 있으며 회사는 큰 벌칙에 직면 할 수 있습니다.
그럼이 문제를 어떻게 해결할 수 있습니까?
저는 HTTP 쿠키 기반 접근 방식을 제안합니다.
단계 :
슬라이딩 만료와 함께 서버 쪽에서 HTTP 쿠키를 만듭니다. Client JavaScript에서 액세스 할 수 있습니다 (참고 : Browser는 만료시이 쿠키를 지 웁니다).
로그 아웃시이 쿠키 지우기
이 쿠키를 찾지 못한 경우 페이지를 다시로드하십시오. 이 경우 서버는 페이지를 다시 인증하고 필요한 경우 로그인 페이지로 리디렉션합니다.
그게 끝났습니다.
다음은 ASP.NET을 사용하여 구현 한 것입니다. 구현은 서버 기술에 따라 다르지만 아이디어는 동일하게 유지됩니다.
(서버 측). 슬라이딩 만료와 함께 서버 쪽에서 HTTP 쿠키 만들기
Response.SetCookie(new HttpCookie(“TimeoutCookieName”, "1") { Expires = DateTime.UtcNow.AddMinutes(10) });
//NOTE 10 == Session Timeout. This will be same as your application login session timeout.
(서버 쪽) 로그 아웃에
Response.SetCookie(new HttpCookie(“TimeoutCookieName”, "1") { Expires = DateTime.UtcNow});
(클라이언트 사이드)이 쿠키를 지우십시오 : (다음 스크립트해야는 BODY 태그 바로 존재)
window.preventBackButton = function() {
try {
if (document && (!document.cookie || document.cookie.indexOf('_tc=1') < 0)) {
window.document.body.style.display = 'none'; window.location = window.location;
}
} catch (e) { }
};
window.preventBackButton(); //Call immediately after body tag
ASP를 찾아주세요.다음과 같은 NET 구현 :
////C# Helper class - Start
using System;
using System.Web;
namespace MyHelpers {
public static class MyHtmlHelper {
public const string TimeoutCookieName = "_tc";
public static HtmlString PreventBackButtonScript(HttpResponseBase response) {
response.SetCookie(new HttpCookie(TimeoutCookieName, "1") { Expires = DateTime.UtcNow.AddMinutes(10) });
var clientScript = "window.-reventBackButton = function() {
try {
if(document && (!document.cookie || document.cookie.indexOf('" + TimeoutCookieName + "=1') < 0)) {
window.document.body.style.display='none'; window.location = window.location;
}
} catch(e) {}
};
window.preventBackButton();";
return new HtmlString(clientScript);
}
public static void SafeUnSetTimeoutCookie(this HttpResponseBase response) {
response.SetCookie(new HttpCookie(TimeoutCookieName, "0") { Expires = DateTime.UtcNow.AddYears(-5) });
}
}
}
////C# Helper class - End
//Shared\_Layout.cshtml
//Make sure not to include after logout OR login page
<html>
<body>
@MyHelpers.MyHtmlHelper.PreventBackButtonScript(Response)
.
.
<⁄body>
<⁄html>
나는 당신의 브라우저 – mint
가능한 중복 뒤로 버튼을 해제 할 수 있다고 생각하지 않습니다 [안 브라우저의 뒤로 버튼 (http://stackoverflow.com/questions/961188/disable- 브라우저 - 뒤로 버튼) – thomasrutter
다른 복제본 : http://stackoverflow.com/questions/3359941/how-to-disable-back-button-navigation-on-certain-pages – thomasrutter