通过会话存储产品列表

时间:2010-10-05 14:03:16

标签: asp.net-mvc cookies

我正在使用MVC ASP.NET C#,jQuery

我正在构建可以被称为世界上最简单的购物车的东西。 基本上我的客户希望用户能够浏览网站,点击他们想要的产品并将其添加到“列表”,然后当他们“结帐”时,他们只需填写一个表格,然后通过电子邮件向我的客户发送电子邮件列表他们选择的产品!

我在考虑将它们存储在cookie中。因此,当用户浏览它们时不会丢失,然后当他们选择查看/签出他们的购物车时会出现一个jQuery对话框。它可以列出所有产品,然后只需填写一个简单的表格..

这是最好的方法吗?它是一个廉价的网站,我想最简单的方法来做到这一点?所有我想我需要排序的是产品Id ..

任何更好的方法或任何意见的想法!

4 个答案:

答案 0 :(得分:2)

使用Session取决于您是否认为用户将一次性选择产品。或者他们会离开页面并在一小时后回来?问题在于,如果他们在一小时后回来,会话状态可能已被垃圾收集以释放服务器上的资源,或者会话可能已过期。

为了解决这个问题,如果所有产品都在一个页面上,您可以将所选产品存储在隐藏字段中,加密后全部保留,直到用户关闭应用程序为止。

您只需要序列化产品ID列表,将该序列化字符串传递给视图并将其放在隐藏字段中。

答案 1 :(得分:1)

我要去找Session对象。您始终可以在运行时配置会话的位置

我认为有些人可能不喜欢这种存储方法(它会破坏测试隔离,如果我没有弄错的话),但它是免费的:)

答案 2 :(得分:1)

另一种选择是将其存储在用户会话中。这样做的一个好处是,如果用户关闭了cookie并且该网站满足无cookie会话状态,那么他们仍然可以选择产品和结账。
需要注意的是你有多少可能最终存储在会话中。从它的声音来看,这不会是一个问题,但如果这可能会耗尽不可接受的内存量,那么你可能需要考虑数据库方法而不是cookie。

答案 3 :(得分:1)

如果你正在使用jquery,你可以将篮子存储为$('body')。data()元素内的json数组(或实际上就像我所做的那样,在名为'#storage'的div下)。这可以作为一个梦幻般的本地存储机制,只会与用户所在的当前页面相关,并且会在移动到后续的“新页面”时被清除,除非您的设计是这样的,购物页面总是如此同一页面,只有ajax方法刷新。这样,您可以在'worksurface'页面上不断追加/修改json结构。

我将这种技术用于逻辑的不同应用,但实际上也是出于同样的原因。

这是我做的事情的片段:

/* example of data params key*/
var keyParams = "Data-Search-type-" + $('#searchtype').val();
/* add json to body with key*/
$('#storage').data(keyParams, jsonData);

/* get same data back later */
var jsonData = $('#storage').data(keyParams);

当我将数据“保存”到服务器时,我将data()元素清除为null。当然还有localstorage本身的另一个选项可以很好地使用,特别是在断开连接的环境中(例如移动应用程序)。

另一种剥皮许多皮肤猫的方法!!