2011-11-23 174 views
1

在我写的模块中,我在会话中存储了用户添加到购物车中的项目。 你将如何处理这种情况:用户在会话超时后添加一个新项目到他的购物车?
我可以重定向到主页,但是即使会话未被使用,我也会导致重定向发生。比如当用户没有登录时,或者他的购物车是空的。处理会话超时丢失数据

如何处理应用程序中的会话超时?

回答

5

在这种情况下,我可能不会使用内置的ASP.NET会话提供程序。相反,您可以使用加密的ID为客户的购物车会话设置持久性Cookie,该加密的ID映射到存储在数据库中的会话,该会话存储购物车的内容。

这样,您不必担心超时,会话将在cookie的整个生命周期内持续。

(如果你确实需要使用ASP.NET会话,也许你已经有了使用它,那么你可以将超时设置为一个非常大的数量和配置Session state provider使用SQL Server的代码。)

+0

的车最多可以有3500+的项目。你还认为cookie是一个好主意吗?存储每个部分购买的所有数据?处理数据库的临时数据 - 触发器和东西太多了。 – gdoron

+0

**“配置会话状态提供者使用SQL Server”**如何?它有什么作用?谢谢。 – gdoron

+0

只有加密的ID存储在cookie中(Cookie应该用于存储大于4KB)。这用于引用存储在数据库中的会话数据。 –

0

另一种方法是将购物车存储在cookie中。

1

您的页面可以运行一个JavaScript定时器,当时间用完时,页面会被重定向到另一个页面,例如login,查询字符串参数作为标志。当使用x标志调用登录屏幕时,购物车将被保存到数据库以保持安全。关键是让超时时间短于会话超时。

新增:

的Javascript每一页上:

<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好方法!你可以请与我们分享一段代码如何使这个奇迹发生?以及如果用户离开页面一个小时并且他没有看到重定向? – gdoron

+0

添加上例 – Darren