2012-02-20 5 views
1

Asp.Net에서 양식 인증을 사용하고 있습니다. 4. 사용자가 로그 아웃 링크를 클릭하는 순간 세션을 지우고 FormsAuthentication.SignOut()으로 전화를 걸면 사용자가 다시 로그인하지 않고 사이트로 돌아갑니다.브라우저 또는 탭을 닫을 때 Asp.Net 세션을 종료합니다.

이제 브라우저 또는 탭이 닫히면 세션을 종료하고 싶습니다. onbeforeunload 이벤트를 처리하여이 작업을 시도했지만 내부 링크를 클릭 한 후에 세션이 종료되었습니다.

어떻게하면됩니까?

답변

1

인증 쿠키 은 세션 만이며 브라우저가 닫히면 브라우저에 의해 삭제된다는 의미입니다. 모든 브라우저 탭을 닫지 않아도되지만 닫으면 모든 인증 쿠키가 손실됩니다.

탭을 닫으면 사용자가 다른 탭을 열 었는지 알 수 없습니다.

가능한 해결책은이 인증을 활성 상태로 유지하기 위해 서버에 10 초마다 호출하고 20 초 후에 인증을 설정하도록 설정하는 것이 좋습니다. 따라서 아무 신호도 돌아 오지 않는 경우에, 사용자는 갔다. 이것은 자바 스크립트를 사용하여 수행 할 수 있습니다. 다른 한편으로 이것은 몇 분 동안 사용하지 않으면 로그 아웃 할 수 없기 때문에이 로직을 다른 것으로 조합해야 할 수도 있습니다.

+0

FormsAuthentication을 사용하면 브라우저 세션에 로그인 할 수 있습니다. 웹에 설정할 수있는 시간 초과 값이있는 이유입니다.당신이 얼마나 오래 동안 활동하고 싶은지를 말합니다. –

0

사용자가 명시 적으로 로그 아웃하여 Session.Abandon()으로 전화를 걸어 사용자의 세션을 제거하는 것이 가장 좋습니다. 그러나 다른 사람들처럼이 방식으로 로그 아웃하지 않고 탭/창을 닫는 지 알 수있는 방법이 없다고 말했습니다. 세션은 만료 될 때까지 서버에서 멈 춥니 다.

0

사용자가 라이브 사이트에서 web.config를 편집 할 때 세션에 문제가있는 다른 질문에 대한 답변을 보았습니다. 그들은 여전히 ​​세션 변수 (위험)로 로그인 한 사용자를 추적하고있었습니다. 그러나 여기 사람들을 도울 수있는 솔루션 (테스트되지 않은 솔루션)이 등장했습니다.

FormsAuthentication을 사용하면 활성 상태이고 로그인 된 사용자를 무기한으로 유지 관리 할 수 ​​있습니다. 그러나 예를 들어 20의 최소 한도는 로그 아웃 될 것이다. 그것은 멋지다. 하지만 시간이 지나면 로그 아웃 할 수 없으므로 시간 초과 값을 0으로 설정하면 브라우저가 계속 로그인 할 수 있습니다.

그래서 해결책 : FormsAuthentication을 사용하여 사람을 로그인 할 때 브라우저를 닫을 때 삭제되는 표준 세션 변수 쿠키를 설정할 수도 있습니다. 이 쿠키는 비 식별 비 계좌 관련 정보를 갖습니다. 그냥 간단한 "loggedIn : 예".

이제는 모든 코드가 masterpage/materlayout에 있어야합니다. makelayout은 쿠키와 사용자 ID를 모두 확인하는 페이지주기 또는 생성자 속성의 페이지주기 또는 생성자에서 높은 수준의 호출입니다.

if(!HasLoginCookie() || !System.Web.HttpContext.Current.User.Identity.IsAuthenticated) 
{ 
    // redirect user to log in page. 
} 

기본적으로 브라우저가 닫힐 때 쿠키가 제거되면 사용자를 로그인 페이지로 리디렉션합니다.

바라건대 그게 도움이됩니다 (그리고 작동합니다.

관련 문제