기존 세션 객체를 통해 반복하십시오
-
06-07-2019 - |
문제
여러 사람이 동일한 로그인을 사용하지 않도록 로그인 할 때 동일한 사용자 이름에 대한 기존 세션을 죽일 수 있기를 원합니다.
기존 세션을 통해 반복하고 죽일 수있는 방법이 있습니까?
해결책
이것을 Global.asax에 추가하십시오
protected void Application_Start(object sender, EventArgs e)
{
Application["sessions"] = new List<HttpSessionState>();
}
protected void Session_Start(object sender, EventArgs e)
{
var sessions = (List<HttpSessionState>)Application["sessions"];
sessions.Add(this.Session);
}
protected void Session_End(object sender, EventArgs e)
{
var sessions = (List<HttpSessionState>)Application["sessions"];
sessions.Remove(this.Session);
}
이제 이와 같은 세션을 반복 할 수 있습니다
var sessions = (List<HttpSessionState>)Application["sessions"];
foreach (var session in sessions)
...
다른 세션을 죽이기 위해 당신은 Session_Start
오래된 세션을위한 방법을 포기하십시오. 이런 식으로 보일 수 있습니다.
protected void Session_Start(object sender, EventArgs e)
{
var userId = (int)this.Session["userId"];
foreach (var session in sessions)
if ((int)session["userId"] == userId)
session.Abandon();
var sessions = (List<HttpSessionState>)Application["sessions"];
sessions.Add(this.Session);
}
다른 팁
로그인 한 사용자를 데이터베이스에 저장하고 이미 로그인했는지 확인할 수 있습니다. 다시 로그인하지 못하게 할 수 있습니다. Global.asax에서 Session_start 메소드 사용
짧은 대답 : 아니요.
긴 대답 : 자신의 세션 제공 업체를 구현해야합니다. 보안상의 이유로 한 세션이 다른 세션을 참조 할 방법은 없습니다. 당신은 돌아 다니며 자신의 세션 관리를 구현해야합니다.
이것을 구현했을 때, 나는 응용 프로그램 변수, 사전 또는 배열에 사용자 ID (또는 고유 한 것)를 저장했습니다. 로그인시 애플리케이션 사전에 사용자 ID의 존재를 쉽게 확인할 수 있습니다. 유일한 문제는 로그 아웃하지 않고 브라우저를 닫는 사람들입니다. 이 이벤트를 감지 할 수있는 신뢰할 수있는 방법을 찾지 못할 것입니다.
커프에서 :
Session_Start (일반적으로 성공적인 로그인)에서 사용자의 userID를 저장하고 SessionID를 조회 테이블 (또는 사용자 테이블의 새 열)에 저장합니다.
각 요청에서 userID (세션에 저장) 및 SessionID가 조회 테이블에 저장된 값과 인증 단계로 일치하는지 확인해야합니다.