本人做了一个模拟购物网站,遇到一些问题。
第一个用户选择了A、B、C商品然后第二个用户只选择D商品。点击查看的时候,购物车列出A、B、C、D四种商品,请问哪里出了问题?
<%@ page contentType="text/html;Charset=GB2312" %>
<%@ page import="java.util.*" %>
<HTML><P>这里是结帐处,您的姓名以及选择的商品:
<%  String personName=(String)session.getAttribute("customerName");
    out.println("<br>您的姓名:"+personName);
    Enumeration enumGoods=session.getAttributeNames();
    out.println("<br>购物车中的商品:<br>");
    while(enumGoods.hasMoreElements())
            {  String key=(String)enumGoods.nextElement();
               String goods=(String)session.getAttribute(key);
               if(!(goods.equals(personName)))
                 out.println(goods+"<br>");
            }   
 
%>
 <P>点击超链接,连接到food.jsp的页面,购买食品。
    <A HREF="food.jsp">  欢迎去food.jsp!</A>
  <P>点击超链接,连接到main.jsp的页面,去修改姓名。
    <A HREF="main.jsp">  欢迎去main.jsp!</A>
</FONT></BODY></HTML>

解决方案 »

  1.   

    你用session.getAttributeNames()当然会列出A、B、C、D四种商品,这个方法会把你所有放进去所有属性集合取出来了.
      

  2.   

    你最好再写一个购物车类,购物信息封装到这个类里。再向session中添加读取
      

  3.   

    我的只是一个简单的模拟购物车 还没有考虑比较复杂的程度。。session.getAttributeNames(); 是取得服务器中所有session的名值,返回的是枚举类型. 通过取得所有的session的名,就可以取得服务器中所有session的值 但是我想取得一个用户的购物信息 另一个用户登陆的时候购物车就不一样啦
      

  4.   

    session.setAttribute("user1","a,b,c");
    存和取得时候都用用户名做key
      

  5.   

     你是说session.getId()吗?加哪?
      

  6.   

    用户名变了,session应该清空,或者直接用登陆名作为session的key
      

  7.   

    能确定用户A和用户B是用的同一个SESSION吗?
    建议最好不要使用SESSION对象来存储数据,它里面都放一些对整个网站来说比较通用的值(例如登陆ID等),而每次WEB请求时最好用REQUEST来传值。
      

  8.   

    每个登陆用户都有自己独立的sessionid(服务器自动分配的,不用我们管),购物车实现在后台代码session对象中添加一个商品列表的属性,setAttribute("list",Object);这个Object可以是数组,也可以是集合,字符串也没问题(拆分字符串实现多条记录),作用是存放商品信息,商品可以用实体封装。如果考虑响应时间可以只放商品的ID和一些显示信息。在前台jsp中调用 session.getAttribute("list") 这个方法返回的是Object对象,需要强转成你存入的对象类型。最后就是显示的东东了。
    一般业务逻辑做好就没什么问题了
      

  9.   

    应该搞一个id给每一个用户一个id号然后根据用户id来获取
      

  10.   

    session就是证对于一个用户的,其实就是浏览器。
    同一个浏览器添加当然会放到一起咯。
    另外你购物车的思想不怎么好,最好是建一个购物车类,可以hasMap或者ArrayList保存
    再建一个购物车里的事物对象,存放每种商品,其实就是一个bean类
    没必要去区分什么用户的,要区分的话就去区分登陆后的用户吧
      

  11.   

    每个用户都有对应的用户id通过用户id和他购买的东西关联起来
    session.setattribute("userid",buyString);
    然后再getattribute(“userid”)就可以了
      

  12.   

    代码没什么问题,只要你开2个浏览器就行了。
    注意,是2个浏览器!ie7那种1个浏览器的2个标签是不行的!
    2个浏览器才会有2个session。
      

  13.   

     选你那些A、B、c、d的checkbox的jsp页面 name="choice"
     <%  String bookName[]=request.getParameterValues("choice"); 
          if(bookName!=null)
          { for(int k=0;k<bookName.length;k++) 
            { session.setAttribute(bookName[k],bookName[k]);
            }
          }
      %> 
    这是对你那些商品的选定
      

  14.   

    代码应该没问题,你是自己测试出来的这2个问题。是不是你在同1个浏览器上开2个页面进行测试,session是一样的,所以会出现这个问题。因为正常情况,session是不可能会冲突的。
      

  15.   

    我想你的商品和用户肯定是分为两张表的,所以应该在商品表中有一个userid,用于两表关联,当你以A用户登陆进入系统后购物时,点击了a,b商品,则插入数据库的sql语句是insert into 商品表(id,productname,userid) values(?,?,?),其中userid,是根据session中的user得到的,这样肯定不会出现你这样的问题的,并且要注意你在测试时session是否是同一个session,打开一个页面,就是一个session,所以你即使在该页面的基础上,文件--》新窗口 仍是同一个session。所以最好是打开两个不相关联的页面进行测试
      

  16.   

    同样的问题怎么用session 做购物车。。 我只想从前台读取到数据之后 暂时保存在session中 如果继续添加物品 session 也会一直改变 直到关闭浏览器为止 不需要 用户登陆