2010-06-28 102 views
3

我们有一个asp.net应用程序,它使用跨页面的单个用户的会话(in-proc),现在他们希望保持数据(例如购物车)更持久,即使他们离开Web应用程序,意味着关闭浏览器,下次他们登录使用相同的ID,他们希望数据回来,ASP.NET中的任何解决方案?比会话更持久?

如果我们保存在SQL服务器我认为这是微软的一个选项会话,但我不知道如果它甚至用户后工作离开应用程序,或关闭浏览器

回答

13

会话数据意味着只坚持浏览器会话的整个生命周期。

答案是不保存会话中的数据,而是将其保存在ShoppingCartShoppingCartItem表中的数据库中。这些将会持续下去,只要你想要它们。

ShoppingCart表将有一个UserID列,即FKUser表。

+0

+1 - 会话之外的持久性是数据库。保存会话=糟糕。 – corsiKa 2010-06-28 15:12:41

2

您需要构建关系数据库并将条目存储在那里。

当然,Application范围高于Session,但它只会存在于应用程序池的整个生命周期中。这听起来像你正在寻找永久存储。

1

我已经看到使用cookie的购物车系统,而有些使用cookie和数据库。只有

饼干:饼干的“官方”的大小为4K

饼干+数据库:在cookie存储一个GUID,并用它在数据库

但参考...我想将购物车存储在cookie或cookie /数据库中并不是非常人性化。如果我离开,我宁愿网站忘记我的购物车。当我经过我的批准网站存储这些信息时,我很恼火。

0

您需要使用数据库来镜像会话中包含的数据,这样数据在用户注销,应用程序重新启动或服务器重新启动后将持续很长时间。您可以将会话对象保存为sql-server作为二进制对象,并在需要时序列化/反序列化,但您怎么知道何时执行初始序列化?当用户关闭浏览器窗口时很难确定何时注销。

将会话对象存储为单个列可能在此期间工作,但从长远来看,您可能希望提出适当的关系设计并将数据存储在表中的列中,这样您就可以运行查询和报告针对“正在进行中的”购物车(例如:人们在购物车最终退房前多久会坐下)?

正如其他人所说,cookie是另一种选择,但存在于客户端,如果他们决定清除cookie(许多技术支持人们似乎将这种建议作为用户抱怨慢速浏览器的第一个响应),购物车丢失。