2009-04-30 2 views
22

내 웹 사이트에서 세션 기반 쿠키를 사용하고 있습니다. 놀랍게도 세션 쿠키 (영구 쿠키가 아님)를 설정하고 탭을 닫은 다음 사이트에 다시 연결하면 세션 쿠키가 여전히 존재한다는 사실을 알게되었습니다. 그것은 실제로 내가 기대했던 것이 아닙니다. 세션 쿠키가 삭제 될 것으로 예상 했었습니다.탭을 닫지 않는 이유 세션 쿠키를 삭제 하시겠습니까?

브라우저를 닫으면 세션 쿠키가 삭제되므로 탭을 닫아도 동일한 결과가 나오지 않는 이유는 무엇입니까?

따라서 PHP5와 jQuery를 사용하고 있습니다. 탭이 닫히면이 세션 문제를 해결할 수있는 조치가 있습니까? 불행하게도 BODY 태그의 onbeforeunload 이벤트는 페이지에서 멀리 클릭하면 탭을 닫는 것이 아니라 해당 이벤트를 발생시키기 때문에 유용하지 않습니다.

답변

14

세션 쿠키는 프로세스별로 창당 표시되지 않습니다. 따라서 새 창을 선택한 경우에도 동일한 세션 ID를 얻을 수 있습니다. 이 동작은 의미가 있습니다. 사이트를 탐색하는 동안 사용자가 새 창을 열 때마다 사용자가 다시 로그인하는 것을 원하지는 않습니다.

저는이 문제를 해결할 실제적인 방법을 모르고 있습니다. 당신이 탭 폐쇄에 의존해야하는 경우

+0

Paul, 아래 Sander에게 "내 문제는 ..."이라고하는 제 의견을 참조하십시오. –

+1

그런 상황에서는 탭 닫기가 주요 문제가 아닙니다. 세션의 만료를보다 적극적으로 제어합니다. 사용자 활동이 없으면 자동으로 로그 아웃하는 JS의 클라이언트에서 일종의 활동 제한 시간을 구현하려고합니다. 이러한 유형의 행위는 대부분의 은행 사이트에서 찾을 수 있습니다. –

+0

Paul, 당신 말이 맞아요. 나는이 문제에 대해 잠을 자고 그 행동이 내가 취할 계획이다. 이제 구현하는 가장 좋은 방법에 대한 또 다른 stackoverflow 질문을 넣어. –

8

이것은 의도적으로 설계된 것으로 변경하려고 시도하는 것은 매우 나쁜 생각입니다. 사용자가 새 탭에서 링크를 열고 닫으면 어떻게됩니까? 원래 탭의 세션을 삭제해야합니까? 당연히 아니지! 이것은 왜 당신이 이것에 대해 생각하지 않아야 하는지를 보여줍니다.

마지막 브라우저 창이 닫히면 세션이 종료됩니다. 다른 것을 원할 경우

  1. 세션을 원하지 않습니다.
  2. 은 "미니 세션"인프라를 만들어야합니다.
  3. 은 아마 상처와 버그의 세계에 있습니다.
+3

여기의 문제는 도서관과 같은 공공 환경과 내부에 신원 정보가있는 온라인 프로필입니다. 나는 해결책을 내놓을 필요가있다. –

+0

그럼에도 불구하고이 질문에 대한 몇 가지 좋은 대답이있는 것으로 보이며 그 중 하나를 정답으로 선택해야합니다. 아마도 새로운 질문을 시작하고 싶습니까? – bignose

3

또한 탭이 닫 혔을 때 감지 자바 스크립트를 작성하고 자바 스크립트

+3

어떻게 할 수 있니? – thesecretmaster

+0

이벤트 – Hammer

+0

을 beforeunload하는 리스너를 추가하려고 내가했던이 $ (창) .scroll 같은 (함수() { \t \t 경우 (sessionStorage.getItem ('advertOnce')! == '진정한') { \t \t \t \t sessionStorage.setItem ('advertOnce', '참'); \t \t \t \t initPopup(); \t \t \t \t \t \t}}); –

2

세션 웹 스토리지에 쿠키를 삭제할 수 있습니다 대신 쿠키를 사용할 수 있습니다.

1

해결 방법이 있습니다.

저는 ASP.NETC#으로 일하고 있습니다. Login 페이지를 제외한 사이트의 모든 페이지에 대해 Master Page이 있습니다. Master Page Sever Page Load event에서 참조 페이지의 Url이 나오고 사이트의 루트가 포함되어 있는지 확인하십시오. 그렇지 않은 경우 Login 페이지로 리디렉션되고 그 이후에는 Master Page이 표시됩니다.

다른 사이트의 페이지로 이동하려고하거나 브라우저의 주소 상자에 Url을 입력하면 작동합니다. 따라서 탭을 닫고 다른 탭에서 다시 들어가거나 탭을 다시 열려고해도 쿠키가 삭제되지 않은 경우에도 Login을 통과하지 않고 사이트에 다시 입장 할 수 없습니다. 탭을 닫지 않고 같은 탭에서 다른 사이트를 탐색하는 경우에도이 기능이 작동합니다.

은 당신이 열립니다 다른 탭의 사이트의 다른 페이지로 연결되는 링크를 열 경우에도 문제가 없습니다 코드

if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root")) 
     { 
      Response.Redirect("~/Account/Login.aspx"); 
     } 

사이트 내에서 탐색합니다.

Login 페이지로 redircting하기 전에 해당 if 절에있는 세션 및 인증 쿠키를 삭제할 수 있는지 확인하려면 다음을 수행하십시오.

사용자가 동일한 탭에서 다른 사이트로 이동하여 브라우저에서 back to 버튼을 누르면 캐시에서 작동하고 자동으로 서버에 요청을 보내지 않기 때문에이 기능은 작동하지 않습니다.

이렇게하면 탭을 닫을 때 세션 또는 인증 쿠키가 죽지 않지만 탭을 닫은 후에 로그인하지 않고도 사이트 재 입력을 막을 수 있습니다.