<Web> Session和Cookie

  session和cookie对于web开发来说,即陌生有熟悉,熟悉是指经常碰到,比如request.getSession(),request.getCookie(),session.setAttribute()等等都能见到,陌生是指从来不知道他们真正是什么,不能说出个所以然来。那其实我在这个问题也是迷茫了非常久了,希望能借这篇随笔来理理。

  由于Http是无状态协议,就是说对事物没有记忆能力,如果后续的操作需要前面的信息(经典的如购物车),则需要重新传入,这回导致每次连接的数据量增大,所以就需要一个能保持http连接的技术,于是session和cookie就出现了。

  先来看cookie,首先明白它的作用:当用户通过http访问服务器时,服务器会将一个k/v值返回给客户端(浏览器),并给这些数据加上一些约束(也就是除了name/value之外的参数),那么返回给浏览器的数据存下来干嘛呢?当然是为了判断下次访问的时候是不是同一个人,如果是同一个人的话,那么就考虑程序中有些设计可以优化一下,就像刚到过你家的人,马上又回来的话,当然和接待新来的客人不一样了。

  那么cookie是怎么工作的呢,在servlet技术中,已经提供了非常好的cookie支持。

  下面是java servlet包里的cookie类源码段,从这里可以看出cookie有哪些属性。

  技术分享

  我们可以设置自己的cookie属性,new Cookie(String name, String value)即可,但是要注意不可以和version 0或1里面的保留字段一样,否则抛异常,源码如下:

  技术分享

  

技术分享
String getCookie(Cookie[] cookies, String key){
    if(cookies != null){
        for(Cookie cookie : cookies){
            if(cookie.getName().equals(key)){
                return cookie.getValue();
            }
        }
    } 
    return null;
}

@override
public void doGet(HttpServletRequest request, 
                            HttpServletResponse response){
    Cookie[] cookies = request.getCookies();
    String userName = getCookie(cookies, "username");
    String userAge = getCookie(cookies, "userAge");
    if(userName == null){
        response.addCookie(new Cookies("userName", "larry"));
    }
    if(userName == null){
        response.addCookie(new Cookies("userAge", "24"));
    }
    response.getHeaders("Set-Cookie");
}
View Code

 

  

  session是存在服务器端的,cookie是存在客户端的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。