在我写的模块中,我在会话中存储了用户添加到购物车中的项目。 你将如何处理这种情况:用户在会话超时后添加一个新项目到他的购物车?
我可以重定向到主页,但是即使会话未被使用,我也会导致重定向发生。比如当用户没有登录时,或者他的购物车是空的。处理会话超时丢失数据
如何处理应用程序中的会话超时?
在我写的模块中,我在会话中存储了用户添加到购物车中的项目。 你将如何处理这种情况:用户在会话超时后添加一个新项目到他的购物车?
我可以重定向到主页,但是即使会话未被使用,我也会导致重定向发生。比如当用户没有登录时,或者他的购物车是空的。处理会话超时丢失数据
如何处理应用程序中的会话超时?
在这种情况下,我可能不会使用内置的ASP.NET会话提供程序。相反,您可以使用加密的ID为客户的购物车会话设置持久性Cookie,该加密的ID映射到存储在数据库中的会话,该会话存储购物车的内容。
这样,您不必担心超时,会话将在cookie的整个生命周期内持续。
(如果你确实需要使用ASP.NET会话,也许你已经有了使用它,那么你可以将超时设置为一个非常大的数量和配置Session state provider使用SQL Server的代码。)
另一种方法是将购物车存储在cookie中。
您的页面可以运行一个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";
}
的车最多可以有3500+的项目。你还认为cookie是一个好主意吗?存储每个部分购买的所有数据?处理数据库的临时数据 - 触发器和东西太多了。 – gdoron
**“配置会话状态提供者使用SQL Server”**如何?它有什么作用?谢谢。 – gdoron
只有加密的ID存储在cookie中(Cookie应该用于存储大于4KB)。这用于引用存储在数据库中的会话数据。 –