ASP.NET에서 서로 다른 하위 도메인에서 세션을 공유하는 구체적인 방법

3812 단어
오늘 이 문제에 부딪혀서 연구를 좀 했습니다.이 문제를 해결하려면 먼저 세션의 이치를 알아야 한다.Session은 서버에서 산목록 형식으로 존재합니다. 우리는 모두 Session이 세션 레벨이라는 것을 알고 있으며, 모든 사용자가 방문하면 하나의 Session을 생성합니다.그러면 서버는 어떻게 서로 다른 사용자의 세션을 구분합니까?또 어떻게 서로 다른 사용자의 세션을 다른 사용자와 연결합니까?다음은 순전히 제 개인적인 이해입니다. 잘못이 있으면 지증해 주십시오.
세션은 서버 측에서 산 목록의 형식으로 존재하고 모든 세션을 구분하는 것은 세션 ID를 통해 이루어지기 때문에 이 세션 ID는 Key가 전역에서 유일한 값이라고 할 수 있다.우리는 ASP를 통과할 수 있다.NET는 다음과 같은 코드로 SessionID를 인쇄합니다.
 
  
protected void Page_Load(object sender, EventArgs e)      
{            
Response.Write(Session.SessionID.ToString());     
}

이렇게 해서 우리는 이런 값을 얻었다. 0julmoedn0kz3gyfnr1vksv0은 약간 GUID 같다. 알고리즘이 아니어도 모두 유사한데 주로 전역의 유일성을 확보하기 위해서다.이렇게 하면 서로 다른 사용자의 세션을 구분하는 목적을 달성할 수 있다.이어서 두 번째 질문은 바로 세션 ID가 생겼는데 어떻게 해당하는 방문자(사용자)와 연결됩니까?예를 들어 사용자 A 방문은 자신의SessionID를 유지하고 사용자 B 방문도 자신의SessionID를 유지한다.우리는 웹이 http에 기반을 두고 링크가 없다는 것을 알고 있는데, 그들은 또 어떻게 했을까?맞습니다. 정답은 클라이언트에 자신의 세션 ID를 저장한 것입니다.브라우저가SessionID를 저장하는 방법은 두 가지가 있는데 하나는 쿠키를 이용하는 것이다.또 하나는 url 파라미터를 이용하는 것이다.
쿠키 얘기가 나왔는데 왜?Session이랑 Cookies랑 이런 사이인 줄 몰랐죠?(많은 사람들이 알고 있다. BS를 하지 마라) 맞아요. 우리가 URL을 요청할 때 서버는 전역적인SessionID를 생성하고 이 값을 쿠키 형식으로 클라이언트, 즉 브라우저에 저장합니다. (url 방식은 잠시 논의하지 않습니다).이렇게 하면 사용자가 다시 요청할 때 http 헤더에서 이 세션 ID의 쿠키를 서버에 보내면 서버는 이 세션 ID를 찾아서 찾으면 됩니다.이 사용자의 상태가 존재한다는 것을 증명한다.
이 원리를 알게 되면 우리의 문제도 눈살을 찌푸리게 된다. 즉, 쿠키로 세션 ID를 저장하면 우리는 쿠키에서 손발을 놀릴 수 있다.우리는 모두Cooikes 기록 방식이 역(예를 들어://www.jb51.net/)으로 구분되는 것을 알고 있는데 이것도 각종 브라우저가 규정한 것이다.만약 이렇게 하지 않는다면 안전성에 문제가 생길 것이다.우리가 해야 할 일은 쿠키의 부역 방식을 지정하고 구체적인 지역을 지정하지 않는 것이다. 그러면 쿠키가 하위역을 넘을 수 있다.Cookies는 다음과 같이 도메인을 지정할 수 있습니다.
 
  
protected void Page_Load(object sender, EventArgs e)       
{            
Response.Cookies["MyCook"].Domain = ".jb51.net";   
}

이렇게 하면 우리의 모든 2급역은 모두 이 주역을 인정한다. 예를 들어 a.jb51.net;b.jb51.net;user.jb51.net 등등.이런 인식을 갖게 되면 여러분도 속셈이 있을 거라고 생각합니다. 어떻게 해야 할지. 하지만 지금 문제는 세션 ID를 만드는 방법이 ASP입니다.NET가 자동으로 실현하는데 우리가 어떻게 간섭하겠는가?이것은 이렇게 해서 주동적으로 간섭하지 않지만, 나는 그것의 쿠키를 조작할 수 있다.다음은 ASP를 연구하겠습니다.NET에 Session ID가 저장된 Cooike의 이름은 무엇입니까?인터넷을 통해 쉽게 찾을 수 있습니다. 이름은 ASP입니다.NET_SessionId, 이것이 바로 SessionId의 쿠키 이름입니다.저희가 세션에서...Start에는 다음과 같이 표시됩니다.
 
  
protected void Session_Start(object sender, EventArgs e)      
{           

Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID.ToString();  

Response.Cookies["ASP.NET_SessionId"].Domain = ".jb51.net";     

}


코드는 매번 세션이 시작될 때마다 ASP를NET_Session Id 이 쿠키는 우리가 이미 가지고 있는 Session ID로 다시 쓰고, 이 쿠키의domain을 부역으로 지정합니다. 예를 들어:.jb51.net, 이렇게 하면 크로스 하위 영역의Session 공유를 실현할 수 있습니다.어때요 쉽죠?
우리는 클라이언트가 저장한 문제가 해결되었는데 서버 측의 세션은 어떻게 해야 합니까?일반적인 상황에서 우리의 서로 다른 하위 영역은 서로 다른 서버를 가리키는 것이다. 예를 들어user.jb51.net 전문 서버,yellow.jb51.net 전용 서버이때 그것들은 진행 과정은커녕 물리적으로도 하나가 아니다.세션은 어떻게 공유해요?이 때 다른 방법을 사용합니다. 기본 세션은 asp에 저장됩니다.net 프로세스에서 이렇게 하면 서로 접근할 수 없습니다. 아래와 같습니다.
 
  


ASP를 저장할 수 있는 별도의 서비스인 State Server 방식으로 수정할 수 있습니다.NET Session의 경우 분산 원격 호스트를 지원하므로 다음과 같이 한 대의 서버로 Session 서비스를 제공할 수 있습니다.
 
  


이렇게 하면 서로 다른 하위 도메인의 세션 공유를 완전히 실현할 수 있다.
앞에서 말했듯이 Url은 SessionId를 저장하는 방식을 자주 사용하지 않기 때문에 다음과 같은 설정을 보여 드리면 됩니다.
 
  


cookieless 속성은 SessionId를 쿠키로 저장할지 여부를 지정합니다. 다음 모양으로 실행해 보겠습니다.
http://localhost:3380/(S(dqxcs455n4u2vg55ia51fvqg))/default.aspx

좋은 웹페이지 즐겨찾기