码迷,mamicode.com
首页 > 编程语言 > 详细

JavaWeb之Cookie&Session(六)

时间:2015-01-22 17:50:38      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

简介

现在每天整理笔记,第一是巩固知识,第二是把学过的变成自己的。虽然笔记内容很普通,但掌握能这些,变成自己的知识,也是挺不错的

学习技巧

Cookie和Session学习时,明白如何使用以及原理。剩下时间大量练习案例,增加对Cookie和Session的认识

Cookie对象

0. 会话管理

会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话

会话过程中要解决的问题
每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服务器要想办法为每个用户保存这些数据

1. Cookie简介

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

特点
保存在浏览器缓存中,不安全,300个,每隔cookie大小不超过4个
浏览器要不要把cookie给服务器
domain+path+name(只有name也相同,才能找到value)
你的路径.startWith(domain+path):如果是以path开头,name也正确,此时就通过cookie请求头发给服务器

底层实现:
	服务器给客户端set-cookie: showtime=234212349

2. 创建Cookie

创建Cookie
得到客户端发过来的Cookie
Cookie []cookies= request.getCookies();   //cookie:name=value请求头
服务器写回Cookie给浏览器
Cookie cookie = new Cookie("name","value");
response.addCookie(cookie实例);

Cookie文件中数据存储格式
showTime   1421718610521     localhost    /day09_00_showtime/servlet/
name       value	     domain       path

3. 能被访问的URL特点

1.Cookie 能被访问要符合:MYURL.startWith(domain+path)完全匹配   然后再找name也匹配,此时才能访问到value

http://localhost:8080/day09_00_showtime/servlet/abc/ShowTimeServletDemo5  //给
http://localhost:8080/day10_00_cookie/servlet/ShowTimeServlet  //不给
http://localhost:8080//day09_00_showtime/ShowTimeServlet    //不给

2.给不给传cookie是由浏览器决定的,取决于MYURL.startWith(domain+path)完全匹配

确定唯一Cookie
domain+path+name
localhost/day05_01_cookie/servlet/   + lastAccessTime

4. Cookie中属性

name:(必须)
value:(必须)不能是中文
maxage:(可选)最长存活时间.默认是会话。单位是秒
path:(可选)路径
	一个cookie的默认路径是:写cookie的那个servlet的访问路径。
	写cookie的servlet的路径是:String path =/day05_01_cookie/servlet/
如果访问的路径.startWith(path),浏览器就会把刚才写的cookie带给服务器。
domain :(可选)域名
comment:(可选)注释
version:(可选)版本号

5. 服务器与客户端读写Cookie

服务器如何向客户端写Cookie:
HttpServletResponse.addCookie(javax.servlet.http.Cookie)(实际上就是写了一个Set-Cookie的响应消息头)
浏览器对于一个网站最多存20个cookie(Cookie的个数是有限的)
	cookie总数不能超过300个。
	每个Cookie大小不能超过4KB。

服务器如何取出客户端带来的cookie:
	HttpServletRequest.getCookies() (实际上就是获取 名字为cookie的请求消息头)

Session对象

1. HttpSession是什么

servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点。服务器能够以多种方式维护会话,比如使用 cookie 或重写 URL

2. Session和Cookie区别

Session和Cookie的主要区别在于:
Cookie是把用户的数据写给用户的浏览器
Session技术把用户的数据写到用户独占的session中
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象
不是访问一个页面就创建session,而是遇到语句request..getSession();就创建了一个session

3. 获取Session

这两种方法是一样的,先判断有没有,有直接返回,没有创建一个新的
	HttpSession session =  request.getSession();
	HttpSession session = request.getSession(true);

只获取,没有返回null,少了一个创建的工作
	HttpSession session = request.getSession(false);

4. Session实现原理

跟Cookie一样,只不过不发数据,发一个JSessionId的号码如果浏览器发送的JSessionId与服务器的JSessionId一样,说明是同一个Session,数据此时就存在这个Session中

Set-cookie:JSESSIONID=23354354543543   响应头
cookie:JSESSIONID=23354354543543       请求头

Session就是把它当成一个域对象来用   (就是一次会话过程)
内部维护了一个Map集合 
	setAttribute("key",Object);
	Object value = getAttribute(key);
	removeAttribute(key);

存活时间:30分钟(空闲的)会销毁------------>(具体配置,tomcat安装目录/conf/web.xml  ----搜索30)
session.invalidate();//强制销毁

5. 解决禁用Cookie后servlet共享数据导致的问题

response. encodeRedirectURL(java.lang.String url) 
用于对sendRedirect方法后的url地址进行重写。
response. encodeURL(java.lang.String url)
用于对表单action和超链接的url地址进行重写 

 

案例(参考代码篇)

Cookie案例
显示时间
保存用户名
显示最近浏览记录

Session案例
使用Session完成用户登陆
利用Session实现一次性验证码
利用Session防止表单重复提交
购物车

JavaWeb之Cookie&Session(六)

标签:

原文地址:http://www.cnblogs.com/codingpark/p/4241976.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!