我正在创建一个电子商务应用程序,其中我有一个购物车,我目前的结构是,每当用户保存产品时,我把产品放在datatable和datatable到session中,所以直到session没有超时,用户可以拥有他们保存的列表。
我目前的结构是,每当用户保存产品时,我把产品放在datatable和datatable到session中,所以直到session没有超时,用户可以拥有他们保存的列表。
但是我把session超时时间增加到600mins(10Hours),但我担心的是,这是否是存储购物车信息的最佳方法,因为如果有1000个用户同时访问网站,服务器上就会创建1000个session对象,这是否会降低网站的性能。
我不能把它存储在数据库中,因为如果用户是匿名的,我就没有该用户的独特之处,这样一来,如果有1000个用户访问网站,所有的产品都会被合并,我将无法获取当前用户保存的产品。
有没有其他更好的方法来解决这个问题。
你不应该这样实现。10小时的会话是非常长的,如果你的网站上有1000个用户,你的服务器就会受到影响,会产生一些性能问题。
在我们的电子商务网站上,我们为匿名用户创建了一个cookie。这样做之后,你有两种解决方案。
您可以很容易地改变cookie的到期时间(或删除它),而不会影响服务器的整体性能。对于ID,您可以使用 Guid.NewGuid()
.
更新。
关于我的第二个解决方案--方案的更多细节。
Guid.NewGuid()
名字和数值由你决定)。有了这个解决方案,所有的东西都在数据库中持久存在,不需要会话。你可以像对会话一样改变你的cookie的到期时间,或者你可以在没有任何风险的情况下清理临时表,或者对匿名用户进行统计(为什么他们没有继续结账,平均有多少商品,哪件商品,...)。
这个想法如何,如果匿名用户将物品放入篮子里,sql的临时数据表就会被填满。每个商品的ID是session.ID(由asp随机字符串)。
如果用户想完成这个过程,在他完成添加物品到购物车后,他将登录,一切都很好。
如果用户不再继续购物,而datatable已经被填满,则在session.timeout时调用一个脚本。這個腳本從資料庫表中刪除所有項目,WHERE userID=session.ID (=anonymous)。
好主意还是坏主意?