2011-11-23 4 views
1

모듈에서 사용자가 장바구니에 추가 한 항목을 세션에 저장했습니다. 이 상황을 어떻게 처리하겠습니까? 사용자가 세션 시간 초과 후 새 항목을 장바구니에 추가합니까?
홈페이지로 리디렉션 할 수 있지만 세션을 사용하지 않아도 리디렉션이 발생합니다. 사용자가 로그인하지 않았거나 장바구니가 비어있는 경우와 같습니다.데이터의 세션 타임 아웃 손실 처리

응용 프로그램에서 세션 시간 초과를 어떻게 처리합니까?

답변

5

이 경우에는 ASP.NET 세션 공급자를 사용하지 않을 수 있습니다. 대신 카트의 내용을 저장하는 데이터베이스에 저장된 세션에 매핑되는 암호화 된 ID를 사용하여 고객의 장바구니 세션에 대한 영구 쿠키를 설정할 수 있습니다.

이렇게하면 시간 초과에 대해 걱정할 필요가 없으며 세션이 쿠키의 수명 동안 계속됩니다.

(당신이 정말로 ASP.NET 세션을 사용해야하는 경우, 어쩌면 당신은 이미, 당신은 매우 많은 수에 제한 시간을 설정하고 SQL 서버를 사용하도록 Session state provider을 구성 할 수 있습니다 사용하는 코드를 가지고있다.)

+0

카트는 최대 3500 개 항목을 가질 수 있습니다. 당신은 여전히 ​​쿠키가 좋은 생각이라고 생각합니까? 각 부분 구매에 대한 모든 데이터를 저장 하시겠습니까? 임시 데이터를 위해 데이터베이스를 처리하는 것은 너무 많은 작업입니다. – gdoron

+0

** "SQL Server를 사용하도록 세션 상태 공급자 구성"** 방법? 그것은 무엇을합니까? 감사. – gdoron

+0

암호화 된 ID 만 쿠키에 저장됩니다 (쿠키는 약 4KB 이상을 저장하는 데 사용되어야합니다). 이것은 데이터베이스에 저장된 세션 데이터를 참조하는 데 사용됩니다. –

0

다른 대안은 장바구니를 쿠키에 저장하는 것입니다.

1

페이지에 자바 스크립트 타이머가 실행 중일 수 있으며 시간이 초과되면 쿼리 문자열 매개 변수를 플래그로 사용하여 로그인이라고하는 다른 페이지로 페이지가 리디렉션됩니다. x 플래그를 사용하여 로그인 화면이 호출되면 장 Y 구니가 안전하게 보관 될 수 있도록 데이터베이스에 저장됩니다. 핵심은 제한 시간을 세션 시간 초과보다 짧게하는 것입니다.

ADDED :

자바 스크립트 각 페이지 :

<body onload="PageLoad();"> 

<script type="text/javascript"> 
    function PageLoad() 
    { 
     var t = setTimeout("ExceuteTimeOutTransfer()", 15000); 
    } 

    function ExceuteTimeOutTransfer() 
    { 
     window.location.href = "http://localhost/webplaying/Login.aspx?timeout=Y"; 
    } 
</script> 

코드 뒤에 로그인 페이지의 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request.QueryString["timeout"] != null) 
    { 
     if (Request.QueryString["timeout"].ToUpper() == "Y") 
     { 
      SaveCart(); 
     } 
    } 
} 

private void SaveCart() 
{ 
    lblResult.Text = "Cart Saved"; 
} 
+0

+1 멋진 접근 방식! 이 마술을 어떻게 일으키는 지 알려주시겠습니까? 그리고 사용자가 페이지를 1 시간 동안 열어두고 리다이렉션을 보지 못하면 어떻게 될까요? – gdoron

+0

위의 추가 된 예 – Darren