2011-02-04 4 views
1

사용자가 로그인 할 때 변수를 저장하기 위해 세션 상태를 사용하는 asp.net 응용 프로그램 C#이 있습니다.이 이름은 로그인 이름이며 사용자 영역 전체에 광범위하게 사용됩니다. 문제는 세션이 특정 컴퓨터의 정보를 잃어 버리는 것입니다. 세션 상태에 대해 충분히 알지 못해서 왜 이런 일이 발생했는지 알고 싶었습니다. 예제. 사용자가 그리드에서 다른 선택을하면 약 2 분 후에 화면의 세션 상태 변수를 표시하는 레이블이 비어있어 데이터베이스에 사용자 이름을 입력해야하므로 레코드를 추가 할 때 문제가 발생합니다 기록.세션 상태 손실 값

요약하면. 세션 상태 변수가 모든 컴퓨터가 아닌 단 몇 분만에 값을 잃게되는 원인은 무엇입니까? (나는 내 ​​컴퓨터에서 클라이언트 컴퓨터에서만 문제가 없다. 보통은 그렇지 않다.)

조금 더 많은 정보;

내가 즉 서버 측 코드에서 세션, 또한

session["username"] = username.Text; 

등을 사용하는 내가 가진 호스팅 내가 IIS 설정 (매우 싼 작업 메신저로 할 거의 의미 공유 호스팅 환경입니다 두려워) 웹 구성 변경을 시도하고 다시보고합니다. 모든 해답을 가져 주셔서 감사합니다.

+0

은 사용중인 세션 상태 공급자와 몇 대의 웹 서버를 알아야합니다. –

+3

단지 호기심이 있습니다. 원하는 로그인 이름이면 HttpContext.Current.User.Identity.Name 대신 Session을 사용하는 특별한 이유가 있습니까? – David

+0

prod 웹 서버의 구조는 무엇입니까? 부하 분산 장치가있는 웹 팜? – odez213

답변

4

문제가 이해되면 세션 데이터를 저장해야합니다. SQLServer 데이터베이스가있는 경우 "State Server Mode"또는 "SQL Server Mode"를 사용할 수 있습니다.여기

당신은

http://msdn.microsoft.com/en-us/library/ms178586.aspx 그렇지 않으면 당신은 "사용자 정의 세션 상태 저장소 공급자"를 구축 할 수 있습니다 사용하는 방법을 찾을 수 있지만, 그 방법은 좀 더 복잡하다 생각합니다.

2

세션이 2 분 후에 시간 초과 되었습니까? 값은

<sessionState timeout="40"></sessionState> 

같은 라인에 web.config에 있어야합니다 또는 당신은 global.asax에 세션 타임 아웃 핸들러를 작성하고 그 원인입니다 있는지 확인하기 위해 거기에 중단 점을 넣을 수 있습니다.

+0

현재 너무 작습니까? –

+1

@Daniel, errr, 미안. 젠장, 내가 잘못 입력 했어. 'sessionState'의'timeout' 속성을 확인하십시오. – Blindy

0

세션 상태를 저장하는 방법은 여러 가지가 있으며 가장 일반적인 두 가지 방법은 클라이언트 측 쿠키와 서버 측 세션입니다. (우리는 세션 상태 서버와 데이터베이스에 세션을 저장할 수 있지만 차라리 그렇지는 않을 것입니다.)

다른 사용자가 issuse를 사용하고 있다고 말하면서 세션이 만료되고 있다고 생각하게하지 마십시오. 사용자가 항상하고있는 일을 말하기는 어렵지만 로그인하는 것이 좋습니다. 한두 시간 동안 앉아서 세션 상태로 돌아 왔는지 확인하는 것이 좋습니다. IIS에서 세션 시간 제한을 제어 할 수 있으며 web.config에서도 설정할 수 있습니다. 대부분의 시나리오에서 config가 iis 설정을 "가정"한다고 가정하더라도이 시나리오에서는 제대로 작동하지 않으며 IIS 및 웹 구성 세션 상태 만료를 업데이트하는 것이 좋습니다.

-1

나는 값을 저장하기 위해 세션을 많이 사용하고 있다고 생각하는데 필요할 때만 사용하십시오.

그리고 여기 당신이 당신의 웹 사이트를 더 한 후 메모리 IIS recycles the sessionsession values are LOST 그래서 allowed 응용 프로그램 풀을 사용하는 것처럼 한 후, IIS에서 확인하고 웹 사이트에 대한 application pool을 증가 빈번한 문제에 직면하고있다.

+0

'SHARED Hosting'에서'application pool'을 늘리려면 당신이 호스팅하고있는'support' 호스트에게 연락을 취할 수 있습니다 ... –

4

여러 IIS 서버가 각각 상태를 유지하고있는 것처럼 들리 겠지만 (잘못된 것일 수도 있지만) 로드 밸런싱을 사용하면 동일한 서버를 두 번 공격 할 것이라는 보장은 없습니다. 따라서 서버 A는 찾고있는 상태 정보를 가지고 있지만 서버 B는 그렇지 않습니다.

로드 균형 조정 중입니까? 그렇다면 상태 관리를 위해 SQL 서버를 사용할 수도 있습니다.