2011-03-31 4 views
5

난 당신이 세션 변수에 직접 클래스를 저장할 수 있습니다 읽었습니다 즉ASP.NET - 세션 변수에 클래스 저장 - 작동 원리 (메모리)?

Session["var"] = myclass; 

메모리 관리가 어떻게 작동하는지 내 질문입니다. 이것을 자동으로 클라이언트 측의 세션으로 직렬화합니까?

또는 서버 메모리의 클래스 인스턴스에 대한 데이터를 보유하고 있으며 세션 객체에 대한 참조 만 보유하고 있습니까?

+1

세션은 클라이언트와 관련이 없습니다. – SLaks

답변

12

ASP.Net은 서버의 메모리에있는 static 중첩 사전에 개체를 저장합니다.
그런 다음 세션 ID로 클라이언트에 쿠키를 보냅니다.

다음 번에 클라이언트가 요청을 보내면 ASP.Net은 해당 ID와 연관된 세션을 외부 사전에서 검색 한 다음 해당 세션에있는 개체가 포함 된 내부 사전을 제공합니다.

+1

실제로 이것은 기본 세션 저장소 공급자를 사용할 때만 true입니다. SQL Server를 사용하여 세션 데이터를 저장하여 작업자 프로세스 또는 컴퓨터간에 공유 할 수도 있습니다. – ntziolis

+0

예; 그건 좀 더 진보 된 기능입니다. – SLaks

5

세션에 클래스를 저장하지 않고 이러한 클래스의 인스턴스를 저장합니다. 그리고 yes 기본 세션 저장소는 메모리입니다. 그러나 SQL Server를 세션 저장소로 사용할 수도 있습니다. 그런 다음 일부 직렬화가 발생합니다.

세션 데이터는 클라이언트 측에서 이 아니고입니다.

1

그것은 당신이 ASP.NET에서 설정 한 세션이 방법에 따라 달라집니다;

는 (다른 공급자는 SQL Server에 객체를 직렬화, 또는 완전히 다른 뭔가를 할 수있는이 기본 세션 공급자가 작동하는 방식이다). 기본값은 서버의 메모리에있는 세션이며 기본적으로 사전입니다. 사용자에게 주어진 요청에 대해 잡을이 세션 사전을 식별하는 데 사용되는 세션 쿠키가 제공됩니다 (사용자 당 하나의 세션 사전)

클라이언트는 클라이언트에만 쿠키가 있기 때문에 개체가 클라이언트로 전송되지 않습니다. 쿠키는 너무 작아서 무엇이든 많이 저장할 수 없으며 클라이언트에 개체를 보내는 것 외에 보안 문제가있을 수 있습니다.

당신은 ASP.NET 세션을 저장하는 메모리 대신 데이터베이스를 사용하도록 구성 할 수 있습니다, 그 기본 세션 저장소가 메모리에 here

1

자세히 설명되어 있습니다. 객체가 반드시 직렬화 될 필요가 없기 때문에 어느 것이 가장 사용하기 쉽습니다.

세션 저장소를 변경하면 SQL Server 데이터베이스라고 할 수 있습니다. 그런 다음 세션에 저장 한 모든 객체를 직렬화해야합니다. 그렇지 않으면 예외가 발생합니다.

세션은 기본적으로 20 분 동안 만 지속됩니다. web.config 파일에서 원하는만큼 길게 변경할 수 있습니다. 그러나 그 시간이 지나면 가비지 컬렉션은 메모리에서 제거합니다.