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"); }
session是存在服务器端的,cookie是存在客户端的。
时间: 2024-10-29 15:33:00