处理会话超时丢失的数据

时间:2011-11-23 22:07:27

标签: c# asp.net .net asp.net-mvc asp.net-mvc-3

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

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

3 个答案:

答案 0 :(得分:5)

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

这样,您无需担心超时,会话将在cookie的生命周期内继续。

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

答案 1 :(得分: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";
}

答案 2 :(得分:0)

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