InProc - 이건 작업자 프로세스에 세션을 저장하겠다는 것. 일반적인 방법.
StateServer - 이건, ASP.NET State 서비스인 별도의 프로세스에서 관리하는것.
SQLServer - 요건 DB 레코드에 저장 관리 하겠다는것.
StateServer - 이건, ASP.NET State 서비스인 별도의 프로세스에서 관리하는것.
SQLServer - 요건 DB 레코드에 저장 관리 하겠다는것.
작업자 프로세스가 장애나, 관리목적의 재생이 발생하는 경우 InProc 는 세션값을 잃게 됩니다. 그래서 세션 기반 로그온 상태 관리를 한다면 StateServer 나 SQLServer 가 효과적인데요,,
StateServer 는 간단합니다.
그냥, ASP.NET State Service 서비스 실행하고,. sessionState 를 StateServer 로만 변경해 주면 끝납니다.
SQLServer 의 경우에는, SQL Server 에다가 먼저 Database 를 만들어야 합니다. 생성 스크립느는 버젼별 닷넷 프레임워크가 설치된, C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 폴더에 보면 InstallSqlState.sql 쿼리문을 실행하면 됩니다.
위 쿼리문은, ASPState 라는 DB와, 관련 프로시져, Job 등이 자동 생성됩니다. 삭제는 같은 폴더에 있는 UninstallSqlState.sql 쿼리문 입니다.
실제 세션상태 관리 정보는 tempdb 에 저장을 하므로, SQL Server 가 재시작되면 역시 tempdb 특성상 세션값을 잃게 됩니다. 그래서, 잃지 않게 할려면 ASPState 에 테이블을 생성하여 관리하면 되는데요. 관련 쿼리는 InstallPersistSqlState.sql 입니다.
web.config 에서는 다음과 같은 형식의 노드가 있으면 됩니다.
<sessionState mode="SQLServer" sqlConnectionString="Password=pwd;Persist Security Info=True;User ID=ASPState;Data Source=xxx.xxx.xxx.xxx" timeout="60" cookieless="false" />
ASPState 에 dbo 권한을 가지고 있는 계정을 생성후에 실제 웹페이지를 호출하게 되면, 아마도 tempdb 의 ASPStateTempSessions ASPStateTempApplications 두개 테이블에 대한 권한 오류가 날것입니다.
그럴경우, ASPState 계정에 대해서, 위 2개 테이블에 대한 적절한 권한을 주거나 또는 tempdb 에 대해서 data read/write 권한을 설정해 주면 됩니다.
ASPStateTempApplications 는 어떤 웹어플리케이션인지 구분값을 관리하는 테이블이고, ASPStateTempSessions 는 실제 세션값 정보가 저장되어 있는 테이블 입니다.
422619012 /lm/w3svc/1301884030/root
컬럼: SessionId Created Expires LockDate LockDateLocal LockCookie Timeout
Locked SessionItemShort SessionItemLong Flags
데이터: vzodgrqw511wcr45b1gixmff1930a784
2010-09-03 04:45:23.930
2010-09-03 05:45:28.800
2010-09-03 04:45:28.760
2010-09-03 13:45:28.760
7
60
0
0x3C000000010002000000FFFFFFFF0B436F6D70616E794E616D650
C436F6D70616E79456D61696C0B000000220000000109ED959C
EBB984EBA19C01157765626D61737465724068616E6269726F2E636F6DFF
NULL
0
컬럼: SessionId Created Expires LockDate LockDateLocal LockCookie Timeout
Locked SessionItemShort SessionItemLong Flags
데이터: vzodgrqw511wcr45b1gixmff1930a784
2010-09-03 04:45:23.930
2010-09-03 05:45:28.800
2010-09-03 04:45:28.760
2010-09-03 13:45:28.760
7
60
0
0x3C000000010002000000FFFFFFFF0B436F6D70616E794E616D650
C436F6D70616E79456D61696C0B000000220000000109ED959C
EBB984EBA19C01157765626D61737465724068616E6269726F2E636F6DFF
NULL
0
만료된 세션을 파기하기 위해서 Job 에는 ASPState_Job_DeleteExpiredSessions 이 등록되어 매 1분마다 체크하여 만료된 세션은 파기 됩니다.
댓글 없음:
댓글 쓰기