我正在创建一个电子商务应用程序,其中我有一个购物车。
我目前的结构是,每当用户保存产品时,我都会将产品放入数据表和数据表中,直到会话没有超时,用户才能拥有他们保存的列表。然而,我将会话超时时间增加到600分钟(10小时),但我担心的是,这是存储购物车信息的最佳方法,因为如果有例如1000个用户同时访问该网站,那么是服务器上创建的1000会话对象,不会降低我网站的性能。
我无法将其存储在数据库中,因为如果用户是匿名的,我没有关于用户的独特之处这样,如果1000个用户访问该网站,所有产品将合并,我将无法获取当前用户保存的产品。
还有其他更好的解决方法吗?
答案 0 :(得分:20)
你不应该这样实现。 10个小时的会话时间非常长,如果您的网站上有1000个用户,您的服务器将受到影响,并会产生一些性能问题。
在我们的电子商务网站上,我们为匿名用户创建了一个Cookie。完成后,您有两个解决方案:
您可以轻松更改Cookie的过期时间(或将其删除),而不会影响服务器的整体性能。对于ID,您可以使用Guid.NewGuid()
。
<强>更新强>
关于我的第二个解决方案的更多细节 - 场景:
Guid.NewGuid()
(名称和值由您决定)。使用此解决方案,所有内容都保留在数据库中,不需要会话。您可以像更改会话一样更改Cookie的到期时间,或者您可以毫无风险地清理临时表或创建匿名用户的统计信息(为什么他们没有继续结帐,平均有多少项,哪个项目,。 ..)。
答案 1 :(得分:0)
这个想法怎么样,如果匿名用户将项目放到购物篮中,则会在sql处填充一个临时数据表。每个项目的ID是session.ID(asp中的随机字符串)。
如果用户想完成此过程,则需要在完成向购物车中添加商品后登录;一切都很好。
如果用户将不继续购物,并且数据表已被填充;您在session.timeout调用脚本。此脚本从数据库表WHERE userID = session.ID(=匿名)中删除所有项目
好主意还是坏主意?