SSM总结:Cookie篇

Cookie

  Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

Session

  Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

例子:

 public void doGet(HttpServletRequest request, HttpServletResponse response) {
    //1.将数据写入Cookie
        //实例化一个Cookie
        Cookie cookie = new Cookie(Constants.BUYCART_COOKIE, json.toString());    // (name,value);
        //注意:由于cookie的value值只能装字符串,所以我们将购物车对象(buycart)转化为json,再将json写入cookie的value值
        //关闭浏览器也要有Cookie,那就给它个生存时间就可以了
        cookie.setMaxAge(3600 * 24);
        //设置cookie路径
        cookie.setPath("/");
        //写入肯定是要用response
        response.addCookie(cookie);
    //2.从Cookie中获取数据,就是读
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (Cookie c : cookies) {
                if (Constants.BUYCART_COOKIE.equals(c.getName())) {
                    //拿到cookie名为Constants.BUYCART_COOKIE中的value
                    String value = c.getValue();
                    try {
                         // 将value转成对象,即购物车
                        buyCart = om.readValue(value.toString(), BuyCart.class);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    break;
                }
            }
        }
    }

Cookie的修改、删除

Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。

如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性。

注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。

 Cookie的路径

domain属性决定运行访问Cookie的域名,而path属性决定允许访问Cookie的路径(ContextPath)。例如,如果只允许/sessionWeb/下的程序使用Cookie,可以这么写:

Cookie cookie = new Cookie("time","20080808");     // 新建Cookie

cookie.setPath("/session/");                          // 设置路径

response.addCookie(cookie);                           // 输出到客户端

设置为“/”时允许所有路径使用Cookie。path属性需要使用符号“/”结尾。name相同但domain相同的两个Cookie也是两个不同的Cookie。

注意:页面只能获取它属于的Path的Cookie。例如/session/test/a.jsp不能获取到路径为/session/abc/的Cookie。

cookie中存取中文

  要想在cookie中存储中文,那么必须使用URLEncoder类里面的encode(String s, String enc)方法进行中文转码,例如:

Cookie cookie = new Cookie("userName", URLEncoder.encode("老李", "UTF-8"));
  response.addCookie(cookie);
     在获取cookie中的中文数据时,再使用URLDecoder类里面的decode( String  s,  String  enc)进行解码,例如:

URLDecoder.decode(cookies[i].getValue(), "UTF-8")

还可详见此篇博客:  http://blog.csdn.net/fangaoxin/article/details/6952954




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值