我正在创建一个电子商务应用程序,其中我有一个购物车.我目前的结构是,每当用户保存产品时,我将产品放入数据表并将数据表放入会话,因此在会话未超时之前,用户可以拥有他们保存的列表.然而,我已经将会话超时时间增加到600分钟(10小时),但我担心的是,这是存储购物车信息的最佳方法,因为如果有例如1000个用户同时访问该网站,则会创建1000个会话对象在服务器上,它不会恶化我的网站的性能.我不能将它存储在数据库中,因为如果用户是匿名的,我没有关于用户的独特的东西,这样,如果1000个用户访问该网站,所有产品都会合并,我将无法获取当前用户保存的产品.
解决方法
你不应该这样实现. 10个小时的会话很长,如果您的网站上有1000个用户,您的服务器将受到影响,并会产生一些性能问题.
在我们的电子商务网站上,我们为匿名用户创建了一个cookie.完成此操作后,您有两个解决方案:
>将整个购物篮存放在cookie中(基本上是产品ID数量列表,更多取决于您的需求/策略)或其他技术(例如localStorage).
>在cookie中存储唯一ID,并将该篮子存储在数据库(临时表)中,并使用唯一的cookie ID作为标识符.用户登录系统后,将这些数据移动到用户购物篮表.
您可以轻松更改Cookie的过期时间(或删除它),而不会影响服务器的整体性能.对于ID,您可以使用Guid.NewGuid().
更新:
有关我的第二个解决方案的更多详细信息
>用户访问网站
>您创建一个没有过期日期的cookie:带有值Guid.NewGuid()的cartId(名称和值由您决定).
>用户点击“购买”
>获取cookie服务器端并将cartId,产品/数量添加到“AnonymousBasket”表中
>想象一下,用户离开网站并在一个月后回来,cookie仍然会在这里
>如果匿名用户转到他的购物篮,您可以根据cookie的价值获得他的产品和数量.
>如果用户登录,则删除cookie并将数据从“AnonymousBasket”表移动到“Basket”
>现在,您登录的用户可以处理结帐
使用此解决方案,所有内容都保留在数据库中,不需要会话.您可以像更改会话一样更改Cookie的到期时间,或者您可以毫无风险地清理临时表或创建匿名用户的统计信息(为什么他们没有进行结帐,平均有多少项,哪个项目,. ..).