今天第一天记学习日记。
今天学习了HttpSession和Cookie
一、Cookie
cookie可以看做是一种数据结构,以(key->value)的形式存在。cookie是服务器把片段信息写到客户端或内存上的一种技术。
写cookie的代码:
Cookie cookie=new Cookie("uname",URLEncoder.encode("李四","utf-8"));
//这行是创建了一个cookie对象,名字叫uname,内容是 李四因为cookie中不能存放宽//字节(包括汉字),所以要转换成单字节编码存储。
cookie.setMaxAge(60*60*24*7);
//设置cookie的生命周期,单位是秒
HttpServletResponse.addCookie(cookie);
//将cookie加入到HttpServletResponse中。
读Cookie:
Cookie [] all=httpServletRequest.getCookies();
String cokvalu=null;
if(null!=all&&all.length>0)
{for(Cookie cookie:all)//迭代
{if("uname".equals(cookie.getName()))
{cokvalu=URLDecoder.decode(cookie.getValue(),"gbk");//解码
break;}
}
}
二、HttpSession
Http协议是无状态的。也就是每次访问都是单独的,第一次访问和第二次访问没有联系。
Http是能过令牌的机制完成和客户端的会话。
一个用户的多次访问对应同一个HttpSession对象。
HttpSession中也有一个Map,用setAttribute,getAttribute.....
客户端首次访问一个服务器时,服务器会产生一个令牌(session),存下来(一半生命周期不会太长,可以调),并且发给客户端。客户端浏览器下次访问这个网站的时候就会将这个session传给服务器,服务器会对比你传给它的值,这样就能区别开来不同的用户。
如果你请求的Servlet A中有访问Session的代码:HttpSession hs=httpServletRequest.getSession();
Step1:打开浏览器,就打开一个浏览器的进程,这个进程中是没有cookie的
Step2:向servlet A发一个请求,请求报头没有cookie请求报头
Step3:服务器创建一个HttpSession对象id:aaaaaa(在服务器内存中)
Sep4:服务器给客户响应数据时,增加了一个响应报头set-cookie:jsessionid=aaaaaa
Step5:浏览器收到响应,并且把响应报头set-cookie的值构建cookie放入浏览器进程内
Step6:再次向Servlet A发一个请求,浏览器从内存中取出cookie,这一次请求多了一个请求报头cookie
Step7:服务器接收到session id,就知道这个用户对应的session对象
这是我的上课笔记~在我的新浪博客中发表了同样内容~
如果发现有错误,请多指正~
如果有想联系我交流技术的,可以加我QQ:773669388。欢迎大家多多指点。