2012-01-13 1 views
0

많은 시간을 들이고 생각을 할 때 생각하는 응용 프로그램에서 많은 단어가 필요한 웹 응용 프로그램을 만들었습니다.Asp.net 세션이 시간 초과되어 모든 데이터가 저장되지 않았습니까?

30 분 후에 세션 시간이 초과되었다고 가정 해 봅시다. 많은 단어를 쓰면서 생각하고 세션 시간 제한을 작성하고 로그인 페이지로 리디렉션하면서 모든 기록 된 데이터가 손실됩니다.

세션 시간 초과 기간 연장을 제외하고이 문제에 대한 아이디어가 있습니까 ???

+0

를 사용하여이 작업에 ThreadPool이를 사용 . 또 다른 옵션은 데이터를 사용자 쿠키에 저장하는 것입니다. 세션이 만료 될 때 데이터가 손실되지 않기 때문입니다. – Mharlin

답변

0

현재 세션은 생성되고 In-Process 모드로 관리되며이 모드에서는 세션이 타임 아웃 단계에 도달하면 세션 상태를 복구 할 수 없습니다. SQL Server Modeconfigure your applicationSQL Server Mode으로 설정하면 데이터가 SQL Server 데이터베이스에 유지됩니다.

Profile Properties은 (는) 상태를 저장하기위한 대체 프로그램입니다.

0

정기적으로 "집으로 전화를 걸기"(서버에서 더미 코드를 실행)하는 일부 아약스 기능을 사용할 수 있습니다. 사용자가이 페이지를 열어두면 세션이 활성 상태로 유지됩니다.

당신은 명시 적으로 콜백 세션을 사용해야 할 수도 있습니다, 같은

Session["LastAccess"] = DateTime.Now; 

로 단지 생존을 유지합니다.

15 분마다이 호출을 실행하면 세션이 시간 초과되지 않고 서버의로드가 최소화됩니다.

0

코드의 일부를 별도의 스레드에서 실행할 수있는 비동기 프로그래밍 모델을 사용하십시오. 모델

을 완료

는 APM과 프로그래밍의 세 가지 스타일이있다

  1. 때까지 기다리

  2. 폴링 모델

  3. 콜백 모델 귀하의 요구 사항과 결과를 바탕으로

당신은 더 많은 애플 리케이션 모델을 선택할 수 있습니다 ropriate.

예를 들어, 우리가 당신을 완료하고 샘플 코드

byte[] buffer = new byte[100]; 
string filename = 
string.Concat(Environment.SystemDirectory, "\\mfc71.pdb"); 
FileStream strm = new FileStream(filename, 
FileMode.Open, FileAccess.Read, FileShare.Read, 1024, 
FileOptions.Asynchronous); 
// Make the asynchronous call 
strm.Read(buffer, 0, buffer.Length); 
IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length, null, null); 
// Do some work here while you wait 
// Calling EndRead will block until the Async work is complete 
int numBytes = strm.EndRead(result); 
// Don't forget to close the stream 
strm.Close(); 
Console.WriteLine("Read {0} Bytes", numBytes); 
Console.WriteLine(BitConverter.ToString(buffer)); 

하지만 당신의 스레드를 생성이 필요하거나 제안하지 않습니다 때까지 파일을 읽고 기다릴 수있는 가정 해 봅시다, .NET은 스레드 풀에 내장 지원하는 자신 만의 스레드를 만들려는 많은 상황에서 사용할 수 있습니다. 대신 새 스레드를 생성하고이를 제어하는 ​​샘플 코드

static void WorkWithParameter(object o) 
{ 
string info = (string) o; 
for (int x = 0; x < 10; ++x) 
{ 
Console.WriteLine("{0}: {1}", info, 
Thread.CurrentThread.ManagedThreadId); 
// Slow down thread and let other threads work 
Thread.Sleep(10); 
} 
} 

, 우리는 당신의 Web.config에서 세션의 제한 시간을 변경할 수는 QueueWorkItem 방법

WaitCallback workItem = new WaitCallback(WorkWithParameter)); 
if (!ThreadPool.QueueUserWorkItem(workItem, "ThreadPooled")) 
{ 
Console.WriteLine("Could not queue item"); 
}