Kee*_*eno 37 asp.net-mvc session asp.net-mvc-3
我有一种情况,我需要访问几个页面上的购物车.因此,在产品页面上 - 创建购物车添加一些项目在购物车结帐页面 - 确认帐单地址在购物车结帐帖子 - 做最后检查,添加购物车到数据库,然后去付款
我的问题是,什么是最好的方式绕过购物车?
我已经尝试将购物车从页面传递到回发并保持所有值仍然存在,但是在某些页面(帐单地址确认页面)这看起来很麻烦,我想要检查的是帐单地址并且真的不想要吨在页面上的HiddenFor()再次填充购物车
TempData []是我用于产品结账页面的内容,然后想知道最好继续设置TempData ....
你可以使用会话变量吗?
出于某种原因,我读到了使用Session的不太好的做法,因此问题.
感谢您的指导,如果您认为有用,我很乐意提供一些代码/更多信息.
Zru*_*uty 57
在ASP.NET MVC中使用会话是完全可以的,尤其是在您的购物车场景中.
使用会话有一些缺点,但它们似乎不适用于您的情况:
1)会话阻止用户从多个浏览器选项卡正确浏览您的站点,在一个选项卡中进行的更改将反映在所有其他选项卡中.但是通过购物车,它正是您所需要的.你不需要每个用户购买几个购物车,对吗?
2)默认情况下会话不会保留,如果您在webfarm上运行,则需要将数据库中的会话保存为每个服务器场节点都可以访问.但你似乎不太可能像这样扩展.如果您满足扩展需求,会话将不是您的首要问题.
3)会话需要用户浏览器的其他功能(通常是cookie).但现代浏览器都支持cookie,所以你只需要担心非常特殊的浏览器.
会话对隐藏输入也有一些好处:
1)开销较小.只有一个小会话cookie在您和客户端之间来回传递,而不是完整的隐藏输入集.
2)编程更简单.您不必确保在每个页面中都包含隐藏的输入.
3)安全.客户可以随意更改隐藏输入的内容.您无法通过隐藏的输入轻松传递敏感信息,您需要对其进行加密.会话值存储在服务器上,因此客户端无权访问它们.
Jam*_*ack 11
会话很好,但考虑到亚马逊风格的系统,即使您没有登录,也会向您发送识别cookie.这允许他们将您的购物篮存储在数据库中,与识别cookie密钥相关.
结果是,您可以避免由于会话超时/服务器应用程序域回收而导致丢失购物篮的可怕用户体验(后者通过使用SQLState会话存储来缓解,我建议这样做).用户可以在几天后回来,他们的篮子仍然会在那里.除非这是一个安全/隐私问题,否则我认为它是更好的解决方案.
我会使用Session,除非有理由避免它.
例如,我有一个项目,我在后台重复调用MVC操作.此操作为文件提供服务,该文件在网络上较慢.我曾经使用Session,但我很快发现了主要的不利影响:IIS不会并行执行来自同一用户的调用,而只是依次顺序执行.这对性能产生了巨大影响,因此我使用了另一种方法:将HttpContext.User.Identity设置为用户名,并将其用作从数据库中获取内容的密钥.但你可以将它设置为一些随机的GUID并将其替换为Sessions.
| 归档时间: |
|
| 查看次数: |
28360 次 |
| 最近记录: |