2012-11-22 6 views
0

누구든지 해결할 수 있습니까? 브라우저의 뒤로 버튼 문제입니까?. 사용자가 브라우저 기록 목록에서 임의의 페이지를 선택하면 서버 측 처리를 수행하려고합니다. 예 : 당신이 응용 프로그램에서 로그 아웃 할 때, 그리고 뒤로 버튼을 클릭 할 때 나는 그가 액세스 한 이전 페이지를 보여주고 싶지 않습니다. 내 프로젝트에서 일관성있는 상태로 페이지를 새로 고치려면 다른 페이지가 필요합니다. 브라우저 뒤로 버튼 문제

는 false로 내가 코드에서 쿠키를 추가하려고 한 문제 및 설정 쿠키 값을 해결합니다. 자바 스크립트를 사용하여 쿠키 값을 확인합니다. 거짓이면 아무 것도하지 않고 페이지를 다시로드하십시오. 그리고 그 후에 나는 그 쿠키를 true로 변경하고 있습니다. 그러나 쿠키 값을 변경할 때 기존 쿠키를 업데이트하려고하지만 새로운 쿠키를 삽입하고 있습니다.

이 내가

document.cookie= c_name+ "=" + c_value; 
       //c_name- CookieName ; c_value-Cookie value; 

이 올바른 솔루션을 사용하고 쿠키를 수정하는 스크립트입니다? 아니면 더 좋은 해결책이 있습니까?

미리 감사드립니다.

답변

2

바라건대, 나는 당신의 질문을 올바르게 이해합니다. 실제로 페이지를 캐싱하지 못하도록 뒤로 버튼을 사용하지 않으시겠습니까?

그렇다면 브라우저가 해당 페이지를 캐시하지 않도록 다음 http 헤더를 추가해야합니다. 취급 사이트 로그인에 관한 또한

Cache-Control: no-cache, max-age=0, must-revalidate, no-store

는, 나는 당신이 쿠키 대신 세션을 사용하여 생각 할 수 있습니다 생각합니다. 사용자 ID, 활성 세션 ID 등을 저장하는 데 사용할 수있는 서버의 세션 변수를 만들면 페이지가로드 될 때 세션 값을 확인하고 유효한지 여부를 확인할 수 있으므로 어떤 종류의 세션 변수를 만들 수 있는지 페이지 내용을 클라이언트 측에 표시해야합니다.

+0

비활성화 브라우저 뒤로 가기 버튼 - 나는 응답 세 캐시 제어 헤더를 실현하려 수 있어요. "no-cache, no-store, must re-revalidate"하지만 헤더가 1 개 남아 있습니다 즉 최대 연령 = 0. 이 헤더를 가져올 수 없습니다. 최대 연령 헤더를 얻는 방법? –

+0

사용하는 서버 스크립트 언어가 확실하지 않습니다. ' – woodykiddy

+0

이 질문은 많은 장소에 존재, 예를 들어, 당신은'response.setHeader ("캐시 제어", "노 캐시, 최대 - 나이 = 0,해야-의 유효성을 다시 확인없이 매장")와 같은 STH 할 수 있습니다. 이것이 최고의 대답입니다. PHP를 사용하는 경우 코드는 다음과 같습니다. header ('Cache-Control : no-cache, max-age = 0, must-revalidate, no-store'); –

1

먼저 나를 도와 주셔서 감사합니다.

마지막으로 나는 이것에 대한 해결책을 얻었다. 그리고이 모든

첫 페이지의 렌더링 방법을 무시하고 그 안에 아래 코드를 작성하는 간단한 솔루션을합니다.

// 삽입 쿠키

if (Request.Cookies["loadedFromServer"] != null) 
Response.Cookies.Set(Request.Cookies["loadedFromServer"]); 
else 
Response.Cookies.Set(new HttpCookie("loadedFromServer", "")); 

Response.Cookies["loadedFromServer"].Value = "true"; 

그리고 다음과 같은 스크립트를 작성 마스터 페이지에서 버튼 문제

을 Borwser을 다시 방지 할 수 있습니다.

function ClearCookie() { 
var CACHE_COOKIE = 'loadedFromServer'; 
var loadedFromServer = getCookie(CACHE_COOKIE) == 'true'; 
if (loadedFromServer.toString() == "false") { 
location.reload(); 
} 
document.cookie = CACHE_COOKIE + '=' + getCookie(CACHE_COOKIE) + '; expires=Thu, 01 Jan       1970 00:00:01 UTC; path=/;'; 
} 

function getCookie(c_name) { 
var i, x, y, ARRcookies = document.cookie.split(";"); 
for (i = 0; i < ARRcookies.length; i++) { 
x = (ARRcookies[i].substr(0, ARRcookies[i].indexOf("="))).trim(); 
y = (ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1)).trim(); 
x = x.replace(/^\s+|\s+$/g, ""); 
if (x == c_name) { 
return unescape(y); 
} 
} 
} 

각 기능을 마스터 페이지에서 호출하십시오.