2011-07-09 30 views
0

我试图建立一个购物车的网络应用程序,以便我可以学习javaee。 我正在使用murach的书和head-first-servlets书籍作为参考。 此外,我通过亚马逊网站了解购物车behaviour.I列出我的观察 以及下面的设计理念..我会欢迎您对此的更正/建议。购物车..以前没有登录过的用户状态

有一两件事我注意到的是客户并不需要登录之前。一旦他完成更新车,他去checkout.Then他被要求进行登录info.If他不,他可以将项目添加到购物车没有,他是一个新客户,可以注册并继续。

请考虑这种情况。

假设没有登录权限的新客户添加了几件商品到购物车。在他去结账页面之前,他出去喝茶。 让浏览器空闲5分钟(可以说,此webapp的会话超时设置为5 mts)。他如何检索购物车的早期状态?

如果shoppingcart对象存储在会话中,并且超时时间为5 mts,则这是不可能的。 亚马逊使用cookies跟踪购物车。如果您尝试将商品添加到购物车中,即使没有登录, 关闭浏览器会在同一台机器上使用相同的浏览器回到亚马逊的购物车页面。您会发现添加了商品的购物车相同。 我不认为他们的会话过期,直到有人清除cookie。

因此,要做到这一点,一种方法是将购物车的状态与客户的数据库一起存储。

class Customer{ 
    ... 
    private ShoppingCart cart; 
    ... 
} 

但是,如果用户没有登录,并且如上所述尚未完成购买,该怎么办? 这意味着没有存储在数据库中的Customer对象。只有那个somone从该机器中的特定浏览器将项目添加到购物车。

使用cookie跟踪此信息。如果不会发生会话超时,则只有在清除cookie后会话才会过期。

我想你对this..Being一个新手的意见,我错过了很多东西在设计和coding..Please告诉我,如果有任何 盲点..

感谢

马克

回答

5

你可以做到以下几点:

  • 未认证用户添加的第一个项目到他的车,给它分配一个唯一的ID。
  • 将该标识存储在Cookie中
  • 在数据库中保存对购物车所做的更改,并将该标识作为主键。

当会话超时:从价值以前分配给用户的购物车

  • 饼干

    • 读恢复车从存储在数据库中的数据在当前会话。

    有一个缺点:

    • 假设你已经存储在用户的购物车中的数据块,而用户永远不会回来了。在这种情况下,您需要执行清理策略,例如,购物车最多可以存储两周。
    • 这也可能发生在用户清理其浏览器的缓存

    考虑到了用户可以使用不同的浏览器(因此,不同的缓存/饼干)

  • +0

    感谢..those是浏览您的网站好的建议 – markjason72

    相关问题