新手问题 《agile web development with rails》里的购物车

QueXuQ · 2013年11月26日 · 最后由 stephen 回复于 2013年11月27日 · 2743 次阅读

今天看《agile web development with rails》,觉得他的购物车是不是有点问题,写法如下:

class ApplicationController < ActionController::Base 
  protect_from_forgery

  private
  def current_cart 
    Cart.find(session[:cart_id])
  rescue ActiveRecord::RecordNotFound 
    cart = Cart.create 
    session[:cart_id] = cart.id
    cart
  end

就是每当调用current_cart的时候,如果 session 没有cart_id的时候就创建一个 Cart.那如果多人登录的情况,不就一堆的购物车了?是不是用cookies存会更好一些?但是存在 cookies 里又有一个问,如果别人修改 cookies 里的 cart 值,不就可以看到别人的购物车里有些什么了?

还有一个疑问是,不登录,把商品加入购物车,然后登录了,就把商品加入该帐号的购物车,是不是也把cart_id放到 cookies 里,登录的时候,又把本来的cart_id放到usercart中?感觉这购物车,一多人访问起来,总会生成一堆购物车,强迫症的我看着很辛苦,但是似乎没有更好的方案了。

把 session 存在数据库里只是策略之一,举例而已 另外 cookies 里的东西肯定加密的,乱改没用

#1 楼 @Teddy 你指的 cookies 加密,是指本来带有加密呢?还是说需要自行加密的?因为我看好像只有 session 才加密的。

不就应该每个人一个购物车么...一般的策略是购物车的操作如果用户此时登陆了,就把购物车数据存数据库 如果没登陆就存 session 用户登陆的时候再写数据库

#3 楼 @zj0713001 但是亚马逊之类的,就是在没有登录的情况下加入购物车,然后重新开浏览器还是存在购物车里的。估计就是和书里讲的一样,只不过是用了 cookies 而已吧?

#4 楼 @QueXuQ 那就是用了 cookie 了 或者可以用 localstorage

@QueXuQ 一般都是用 cookie+ 数据库模拟 session 的!不会只用 session!本地浏览器保存一个 cookie 用于记录数据库 cart 的 id,把商品数据保存在数据库里!定时清理数据库过期的 cart 数据!当本地 cookie

#6 楼 @stephen 恩。我就是说这样可能会创建很多 cart,是不是最好的方案就是定时清理一下就可以了。

@QueXuQ 目前来说,应该是吧,想象中,应该是 cookie 过期就通知服务器删除数据,buy,暂时还未能做到把!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号