Page 1 of 1

브라우져 새로고침 뒤로가기 막기... ㅜ.ㅜ

Posted: 2005 04 07 03:11 04
by 앤죠
아래는 익스전용 코드입니다.
표준코드로 바꾸고 싶은데 쉽지 않네요
어떻게 해야하나요
불여우는 event 값을 받아서 e.keyCode 이런식으로 한다는건 알겠는데
e.keyCode==0; 이부분이 분명 키값을 변경하였지만
브라우져는 새로고침고 되고 뒤로가기도 되네요... ㅜ.ㅜ
표준코드로 하려면 어떻게 해야할까요

<script type="text/javascript">
// 키보드 키막기
// 뒤로가기막기,F5

function keydown()
{
alert(event.keyCode);
if (event.keyCode == 8 || event.keyCode == 116) {
event.keyCode==0;
//alert("key="+event.keyCode);
event.cancelBubble = true;
event.returnValue = false;
return false;
}
}
document.onkeydown=keydown;
</script>

Re: 브라우져 새로고침 뒤로가기 막기...

Posted: 2005 04 07 10:27 41
by Guest

Code: Select all

<script type="text/javascript">
	document.onkeydown = function(e){
		key = (e) ? e.keyCode : event.keyCode;

		if(key==8 || key==116){
			if(e){	//표준			
				e.preventDefault();
			}
			else{ //익스용
				event.keyCode = 0;
				event.returnValue = false;
			}
		}
	}
</script>
이 부분은 저도 예전에 별 방법을 다 해봤는데 이해가 안됩니다.
분명 이벤트 객체의 preventDefault(); 메소드를 사용해서 캔슬시킬수가 있다고

http://www.mozilla.org/docs/dom/domref/ ... ref31.html

나와있으에도 불구하고 이벤트가 캔슬되지 않습니다.
오페라로 테스트해도 마찬가지고.

이론상은 위 코드가 맞긴한데 이해가 안됩니다.

그리고 백스페이스나 새로고침을 막는건 홈피를 방문하는 유저들의 이용에 불편함을
주리라 생각됩니다. 스크립트를 통한 제어는 쉽게 뚫리기 때문에 하나마나 거든요.

아 그렇군요 답변 감사합니다.

Posted: 2005 04 07 10:56 44
by 앤죠1

Code: Select all

그리고 백스페이스나 새로고침을 막는건 홈피를 방문하는 유저들의 이용에 불편함을
주리라 생각됩니다. 스크립트를 통한 제어는 쉽게 뚫리기 때문에 하나마나 거든요.
네 저도 압니다만 한가지 문제가 생겨서 그렇습니다.
이전 페이지부분로 백스페이스키로 누르게되면 디비 생성 로직이 있습니다.
디비가 한번 실행해야 되는데 계속 insert 하게 되어 문제가 생겨서요

어느분이 그렇시더군요 히스토리에 남지 않게 location.replace() 로 하라구요
하지만 이것도 문제 입니다. 빠르게 백스페이스키 두번 입력 즉 키보드 키를
계속 누르는 상태라면 이전이 아니라 3,4.. 그이상의 이전페이지로 이동하기
때문에 문제가 있더군요.

방법이 없을까요?

Posted: 2005 04 07 11:12 34
by hyeonseok
이러한 문제는 브라우져차원에서 javascript 로 막는 것 보다는 서버측에서 처리를 하는 것이 맞습니다.

클라이언트 환경에서의 무결성 체크는 절!대!로! 믿을 수 없습니다.

서버측에서 적절한 절차로 페이지를 로딩했는지를 체크하는 방법을 찾아보는 것이 좋습니다.

에혀..

Posted: 2005 04 07 11:18 43
by 앤죠1
결국 세션이나 쿠키로 체크해야 겠네요
첨에 말씀하셨던 e.preventDefault();
이부분 문제는 역시 안되는군요

답변 감사드리며 모두들 좋은 하루 되시길 바랍니다.

한가지 더 있는데요

Posted: 2005 04 07 13:36 21
by 앤죠
서버세션으로 할경우에도 문제가 되는부분이 있는데
F5 키는 막을수 있으나 백스페이스키로 이전페이지로 갔을때
그페이지의 해더선언으로 캐시를 없에도 페이지는 그대로 있습니다.

혹시 뒤로가기 했을때도 새로고침의 효과를 줄수는 없나요?

Posted: 2005 04 07 15:07 32
by hyeonseok
뒤로가기를 해서 페이지에 들어가는 것에 대한 이벤트는 없기 때문에 안될겁니다.

클라이언트 환경을 제어해 봤자 서버측에서 체크를 해주지 않으면 어떤 방법으로든 들어갈 수 있거든요. javascript 로 막아봤자 javascript disable 해버리면 아무 소용이 없잖아요.

새로고침이나 뒤로가기를 막는 것 보다는 새로고침이나 뒤로 가기를 사용자가 했을 때에도 값이 안들어가게 막는 방향으로 생각을 하셔야 할 것 같습니다.

Posted: 2005 04 07 17:25 12
by 박민권
hyeonseok wrote: 새로고침이나 뒤로가기를 막는 것 보다는 새로고침이나 뒤로 가기를 사용자가 했을 때에도 값이 안들어가게 막는 방향으로 생각을 하셔야 할 것 같습니다.
뒤로 가기를 하더라도 값을 다시 전송되지 않도록 처리하는 것이 좋습니다.

파워유저 일수록 게시판 등에서 목록버튼 클릭대신 뒤로가기를 이용하기 때문이죠.

불여우 사용자라면 마우스 제스츄어를 통한 뒤로가기를 할테구요.

답답하시네요

Posted: 2005 04 07 20:39 20
by 앤죠

Code: Select all

새로고침이나 뒤로가기를 막는 것 보다는 새로고침이나 뒤로 가기를 사용자가 했을 때에도 값이 안들어가게 막는 방향으로 생각을 하셔야 할 것 같습니다.
제가 정작 바랬던건 답이었는데 다들 추상적인 말씀이네요

이전페이지에서 세션으로 유니크 값을 생성해 중복방지를 처리하더라도
클라이언트의 캐시가 남아있어 백스페이스키로 이전페이지가 보여집니다.
말짱 도루묵이란겁니다.

즉 이전페이지로 가게되면 클라이언트로 전송된 페이지가
불리워 지기 때문에 이미 세션으로 중복처리를 했더라도 도루묵 이더군요
심지어 각각의 페이지에 nocache 설정으로 해더파일에 선언했는데도
안되더군요. 쩝...

백스페이스키로 이전페이지를 왔을때
유저(클라이언트)의 페이지가 캐시로 저장된 페이지가아닌
서버측 페이지가 보여질수 있게(F5새로고침효과)
나타낼수 있는게 가능한지요?

고수분들의 한수가르침을 부탁드립니다.

Posted: 2005 04 07 21:45 29
by hyeonseok
저도 제가 아는 한 열심히 답을 알려드리고 싶은데 안타깝네요... ㅜㅜ

하시고자 하는 것이 제가 알고있는 한에서는 불가능 한것 같습니다.
그리고 브라우저에서 그러한 것을 처리하려고 하면 문제가 발생할 수 있다고 생각되어서 클라이언트 환경에서의 컨트롤을 하지 마시고 서버측에서 처리하도록 말씀 드린 것입니다.

사용자가 백스페이스로 눌러서 뒤로 가는 것은 이전 히스토리 페이지를 보고 싶다는 것인데 그것을 컨트롤 할 수는 없을 것입니다. 사용자 컴퓨터에 설치되는 프로그램이 아니라 브라우져를 통해서 이루어지는 일이기 때문입니다.

백을 했을때 자료가 갱신 되어야 할 필요가 구체적으로 어떤 것인지 잘 모르겠네요. DB insert 가 일어나기 때문이라면 그러한 것은 javascript 로 처리 하면 안되고 서버측에서 체크를 해서 insert 가 일어나지 않게 처리하는 것이 맞습니다. 그리고 체크를 한다고 하더래도 사용자가 강제로 페이지를 리로드 하고 다시 값을 보내버리면 사실상 이러한 사용자의 행동을 막는 것은 불가능 합니다.

제가 알고 있기로는 그렇습니다. ^^;;

Re: 답답하시네요

Posted: 2005 04 08 20:19 41
by 박민권
앤죠 wrote: 백스페이스키로 이전페이지를 왔을때
유저(클라이언트)의 페이지가 캐시로 저장된 페이지가아닌
서버측 페이지가 보여질수 있게(F5새로고침효과)
나타낼수 있는게 가능한지요?

고수분들의 한수가르침을 부탁드립니다.
그건 불가능합니다.
불가능 하기 때문에 이전페이지로 돌아갔을 경우에 post로 넘어온 값이 다시 날아가지
않도록 프로그램을 만드셔야 합니다.

입력 -> 저장 -> 처리 후 화면

이런 순서일때 저장 부분에서 저장을 한후 메타태그를 통한 리프래쉬로 처리화면으로
새로고침을 한다면 처리화면에서 F5 키를 누르더라도 값이 다시 날아가지 않습니다.

다른페이지로 갔다가 다시 백스페이스로 다시 돌아오더라도 문제가 없죠.

즉 저장과 처리화면을 다른 파일로 만들어야 합니다.

저장파일에서 새로고침을 통해 저장파일의 히스토리는 남지 않게되는 것이죠.

뒤로가기와 새로고침을 막는 방법은 없기 때문에 뒤로가거나 새로고침을 하여도
문제가 없게 이런식으로 만드셔야 한다는 뜻이었습니다.

Posted: 2005 04 09 16:24 28
by yser
정 바란다면....

HTTP Header 에서 Pragma 와 Cache-Control, Expires 부분을 찾아보시기 바랍니다.
단, 이것도 완벽하지 않습니다. 브라우저 설정에 따라 캐시가 될 때도 있습니다.

아예 완전 재작성할 수도...

Posted: 2005 04 15 05:07 35
by sangil
구글 메일을 써보시면 뒤로가기가 의도와는 다르게 된다는
거 아세요?
XMLHttpRequest()를 써서 님의 웹페이지를
완전히 자바스크립트로 구현해보아요..
클릭 하더라도 페이지는 그대로고 내용을
XMLHttpRequest로 불러와서 화면에 뿌려줘야 겠지요. :)
그러면 브라우저 백 버튼이 그걸 추적해서 뒤로 갈 수 없게
되지요..

*joke성 글이니 심각하게 생각하지 마시길...
저쪽으로 바꾸려면 완전 새로 설계 들어가야 됩니다.*