比会话更持久?

时间:2010-06-28 15:07:32

标签: asp.net session

我们有一个asp.net应用程序,它使用会话(进程内)跨页面的单个用户,现在他们想要保持数据(例如购物车)更持久,即使他们离开网络应用程序,意味着关闭浏览器,下次他们登录时使用相同的id,他们想要数据,ASP.NET中的任何解决方案吗?

如果我们在sql-server中保存会话,我认为这是微软的一个选项,但我不确定它是否能在用户离开应用程序或关闭浏览器后工作

4 个答案:

答案 0 :(得分:13)

会话数据仅在该浏览器会话的生命周期内持续存在。

答案是不将数据保存在会话中,而是将其保存在ShoppingCartShoppingCartItem表中的数据库中。只要你愿意,它们就会持续存在。

ShoppingCart表格会UserIDFK到您的User表格。

答案 1 :(得分:2)

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

当然,Application范围高于Session,但它仅在应用程序池的生命周期内存在。听起来你正在寻找永久存储。

答案 2 :(得分:1)

我见过购物车系统使用的是Cookie,有些则使用Cookie和数据库。

仅限Cookie:Cookie的“官方”尺寸为4K

Cookie +数据库:在Cookie中存储GUID并将其用作数据库中的参考

但是......我认为将购物车存放在cookie或cookie /数据库中并不是非常用户友好。如果我离开,我确实希望网站忘记我的购物车。当网站在我的批准下存储此类信息时,我很生气。

答案 3 :(得分:0)

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

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

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