我现在做的一个网上购物的项目,其中要求实现用Cookies来记录用户访问了那些商品,并要求用户访问网页是可以出现用户近期查看的商品,我这个项目是用struts+dao来实现的,我想知道各部分的代码怎么写,那些是写在action中,哪些是写在jsp中
谢谢!

解决方案 »

  1.   

       好象不行吧,如果用户浏览器禁用cookie或时常清cookie的话, 你这个功能就没办法实现了,
    给个解决方法:当用户没次查看商品时写到数据库里,当用户等陆时就显示。不过不知道这样是否合理,不过肯定能够满足你的需求。
      

  2.   

    # <%  
     Cookie c = new Cookie("username", "Linda");  
     c.setComment("A test cookie");  
     c.setMaxAge(3600);  
     response.addCookie(c);  
     %>  这个就可以写入cookie了。读取的你自己找吧。目前禁止coookie的并不多,
      

  3.   

    你给我的代码我以知道了,就是不知道要写在那里,我使用struts框架的,你给我的代码是不是要写在action中呢?
      

  4.   

    写个cookieUtil类嘛!
    用户近期查看的商品时,你action就调用cookieUtil的你cookie的商品id
      

  5.   

    public class CookieAction extends Action {
    public ActionMapping execute(ActionForward mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
    Cookie cookie = new Cookie("name", "value");
    response.addCookie(cookie);
    }
    }
    别忘了导入类
      

  6.   

    这里是将cookie创建并放入客户端,但是怎么从客户端将cookie取出来呢,是在jsp上取还是在action中取呢?
      

  7.   

    但是怎么从客户
    可以用jsp读取啊
      

  8.   

    public class CookieAction extends Action {
        public ActionMapping execute(ActionForward mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
            // request.getCookies();得到本次提交的cookies
            Cookie cookie = new Cookie("name", "value");
            response.addCookie(cookie);
        }
    }
      

  9.   

    转帖
    有很多Web程序中第一次登录后,在一定时间内(如2个小时)再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。实现这个功能关键就是服务端要识别客户的身份。而用Cookie是最简单的身从验证。如果用户第一次登录,可以将用户名作为Cookie写到本地,代码如下:Cookie cookie = new Cookie("user", user);
    cookie.setMaxAge(365 * 24 * 3600);
    cookie.setPath("/");
    response.addCookie(cookie);当用户再次访问程序时,服务端程序应该检测这个Cookie是否存在,代码如下:Cookie[] cookies=request.getCookies();
    for(Cookie cookie: cookies)
    {
    if(cookie.getName().equals(user))
    {
    // 如果user Cookie存在,进行处理
    break;
    }
    }尽管从客户端可以获得User Cookie,但这上Cookie可能存在很长时间,而且仅凭这个Cookie就自动登录并不安全,因此,可以在服务端使用一个Session来管理用户。也就是当第一次登录成功后,就创建一个Session,并将用户的某些信息保存在Session顺。代码如下:HttpSession session =request.getSession();
    session.setAttribute(user, user);
    session.setMaxInactiveInterval(2 * 3600);  // Session保存两小时当再次访问程序时,确定了cookie存在后,就会继续验证User Session的存在,代码如下:Cookie[] cookies=request.getCookies();
    for(Cookie cookie: cookies){
            if(cookie.getName().equals(user)){
                    if(session.getAttribute(user) != null){
                            // 直接forward到主界面break;
                    }else{  
                            // forward到登录界面
                    }
            }
    }
    虽然上面的代码可以很好地实现自动登录功能,但是当浏览器关闭,再次启动后,由于Servlet用于保存Session ID的JSESSIONID Cookie是临时的(也就是说不是持久Cookie,当浏览器关闭后,这个Cookie就会被删除),因此,需要将JSESSIONID进行持久化。代码如下:HttpSession session = request.getSession();
    session.setAttribute(user, user);
    session.setMaxInactiveInterval(2 * 3600);  // Session保存两小时Cookie cookie = new Cookie("JSESSIONID", session.getId());
    cookie.setMaxAge(2 * 3600);  // 客户端的JSESSIONID也保存两小时
     session.setMaxInactiveInterval(2*3600);
    cookie.setPath("/");       
    response.addCookie(cookie);
    如果使用上面的代码,即使浏览器关闭,在两小时之内,Web程序仍然可以自动登录。
      

  10.   

    乍看之下很好,如果所有的用户都放在session里,那服务器还受的了?
      

  11.   

    csdn得验证就是直接读cookie得,不通过服务器验证。
    因为不管客户端怎么改,服务器端验证都还在
    所以楼上的验证只适用于流量较小的网站。
      

  12.   


    不用每浏览一样商品就更新一次数据库,可以把浏览过的商品 ID 先存 Session 中的一个列表里,什么时候等用户注销了在一次性存入数据库。
      

  13.   

    STRUTS不就是要实现MVC分层实现嘛,ACTION中调用DAO操作数据库,在JSP中只做显示的操作,嘿嘿,刚刚弄完你说的那个项目
      

  14.   

     <%  
     Cookie c = new Cookie("username", "Linda");  
     c.setComment("A test cookie");  
     c.setMaxAge(3600);  
     response.addCookie(c);  
     %>