2013-07-05 2 views
0

오랫동안 로그인 한 사용자를 유지 보수하는 방법을 알고 싶습니다. 현재 사용자 인증 및 로깅 상태 유지를 위해 마스터 페이지에서 세션을 사용하고 있지만 짧은 시간 내에 세션이 만료됩니다. 나는 gmail, facebbok, stackoverflow 및 많은 사이트와 같은 많은 사이트에서 보았습니다. 사용자가 로그인하면 다시 로그인하지 않고 몇 시간 동안 사이트를 볼 수 있습니다.Maintian 사용자가 오랫동안 로그인했습니다.

+0

당신은 내가 내 사이트 중 하나에 하나를 이전하려고하는 이유 .. –

답변

1

단지 세션의 제한 시간을 증가하기에 충분하다.

당신의 위치가 약간 혼잡 한 경우, 당신은 세션에서 많이 저장 특히, 다른 것들에 사용될 수 많은 메모리를 채울 세션 타임 아웃을 증가. 세션이 작동하고 로그인 상태를 유지하려면 사용자 브라우저에 설정된 쿠키의 세션 토큰과 일치하는 세션이 있어야합니다. 이유 세션이 만료

하나는 결코 돌아 오지 않는다 당신의 위치에 그 방문자 또는 어쨌든 세션을 필요로하지 않는 검색 엔진 봇에 속하는 메모리를 차지 세션을 제거하는 것입니다.

이 문제에 대한, 페이스 북과 구글과 같은 사이트는 귀하의 브라우저에있는 쿠키의 긴 해시 토큰을 저장 보상합니다. 그들은 서버에이 토큰 (또는 해쉬 된 버전)을 저장하고이를 사용자 계정과 연결합니다. 서버가 돌아 왔을 때 서버가 당신이라는 것을 알고 있고 새로운 세션을 만들 수 있습니다 (FB/Google이 세션을 사용한다고 가정 할 때).).

그래서, 요약, 임의의 텍스트의 긴 문자열을 포함하는 (확인 그것의 도메인을 제한하고 당신은 SSL 등을 사용하는 경우 보안) 쿠키를 생성합니다. 데이터베이스에 임의의 텍스트 (또는 해시)를 속한 사용자 ID와 함께 저장하십시오. 사용자가 귀하의 사이트를 방문 할 때마다 세션이 만들어지지 않을 때마다 해당 쿠키 값과 데이터베이스를 비교하고 행 중 하나와 일치하는 경우 사용자를 로그인하십시오.

희망이 있습니다. @benjamin 말했듯이

+0

귀중한 답변. 나는 오랜 시간 동안 세션을 사용하여 많은 메모리를 사용하고 사이트 속도를 줄이는 것을 읽었습니다. 귀하의 게시물에서 나는 (쿠키 ID, 사용자 ID, 만료 시간 및 ..)와 함께 쿠키 테이블을 만들었습니다. 사용자가 처음 로그인 할 때 사용자 브라우저뿐만 아니라 테이블에 사용자 ID가있는 쿠키를 삽입합니다. 사용자가 다시 방문하여 사이트 페이지를 열면 사용자 ID 당 행을 확인하고 사용자가 로그인 할 수 있도록 허용하십시오. 이것으로부터 우리는 또한 로그 아웃 (만료 시간) 즉 약한 하나를 처리 할 수 ​​있습니다. 쿠키를 브라우저에 저장하는 방법, 브라우저에서 쿠키를 읽는 방법을 확인하는 방법입니다. – Kumal

+0

사용하는 서버 측 언어에 따라 달라집니다. 요즘 PHP를 좋아하는 사람이 많으므로 쿠키가 쿠키를 처리하는 방법을 설명하는 페이지는 http://php.net/manual/en/features.cookies.php입니다. 쓰려면 setcookie()를 사용하고 읽으려면 $ _COOKIE를 사용합니다. 일반적으로 모든 스크립팅 언어는 정확히 똑같은 표현을 가지고 있기 때문에 똑같은 방식으로 작동합니다. –

+0

OK 브라우저에서 쿠키를 읽고 쓰는 법을 배웠습니다. 안전한 지, 모든 브라우저에서 지원하는지, 데이터베이스에서 쿠키에서 추출한 userid를 다른 페이지로 전달하는 방법에 대해 더 많은 의구심이 있습니다. 사용자 ID를 얻기 위해 쿠키를 사용하십시오. 인덱스 페이지로드 속도 또는 성능에 영향을 미칩니 까? 인증을 위해 사용자 ID, 만료 시간 및 기타와 같은 쿠키에 저장할 수있는 항목은 무엇입니까? – Kumal

0

Sessionstate 제한 시간 속성은 분 단위로 표시됩니다. 웹 양식이 지속적으로 24 시간 동안 유휴 상태 인 경우 webconfig 파일에서

...

<system.web> 
....... 
<sessionState timeout="1440"></sessionState> 

</system.web> 

세션이 만료 얻을 것이다.

는 당신은

<system.web> 

은 자세한 내용은 http://msdn2.microsoft.com/en-us/library/h6bb9cz9%28vs.80%29.aspx를 참조

내에서이 sessionState의 블록을 가질 수 있습니다. 귀하의 사이트는 일주일에 몇 백 방문자를 얻을 경우

+0

을 설정할 수 있습니다. 얼마 동안은 잘 작동하지만 시간 제한 전에 세션이 만료됩니다. –

+0

그 이유를 게시하고 FormsAuthentication을 시도하고 누군가가 아래로 투표를하는 경우 영구 쿠키를 – Kumal

0

예, 저 당신의 시간 제한을 유지한다. 정말 낮아. 5 분 정도로 낮습니다. 이렇게하면 서버 메모리가 너무 많아지지 않습니다. 실시간 세션을 유지하려면 자바 스크립트 setInterval을 사용하여 매 3-4 분마다 서버를 폴링하거나 web.config에서 slidingExpiration="true"을 사용하십시오.

사용자를 다시 방문하는 경우 (@ 벤자민의 제안을 구현하는 데 어려움이있는 경우) 로그인 페이지에 "내 정보 기억"확인란을 사용하는 것이 좋습니다. 그냥 수동으로 FormsAuthentication 쿠키를 재사용 : isRememberMe 체크 박스 값입니다

If allIsWell Then 
    FormsAuthentication.SetAuthCookie(userName, isRememberMe) 
End IF 

합니다. true 인 경우 영구 쿠키가 설정됩니다.Global.asax에있는 그런

:

If HttpContext.Current.User.Identity.IsAuthenticated Then 
    'Recreate user session contents here 
End If 
관련 문제