jsp状态管理(Cookie Session)学习笔记整理
2016-02-22 14:35
645 查看
1、状态管理
将浏览器与web服务器之间多次交互(一次请求,一次响应)当做一个整体看待,并且将多次交互涉及的数据即状态保存下来。
2、状态管理的两种常见模式
(1)客户端状态管理技术:将状态保存在客户端。--------cookie技术
(2)服务器状态管理技术:将状态保存在服务器。--------session技术
3、cookie
(1)什么是cookie
服务器临时保存在浏览器端少量的数据
(2)cookie工作原理
浏览器访问服务器时,服务器将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这些数据临时保存下来。
当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。
具体过程:
①服务器创建cookie对象,把会话数据存储到cookie对象中。
new Cookie("name","value");
② 服务器发送cookie信息到浏览器
response.addCookie(cookie);
举例: set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)
③浏览器得到服务器发送的cookie,然后保存在浏览器端。
④浏览器在下次访问服务器时,会带着cookie信息
举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)
⑤服务器接收到浏览器带来的cookie信息
request.getCookies();
(3)创建cookie
Cookie cookie = new Cookie(String name,String value);
response.addCookie(cookie);
注:
name:用于区分不同的cookie的名字
value:Cookie的值
(4)读取Cookie
Cookie [] cookie = request.getCookies(); -----读取客户端发来的全部cookie
String cookieName = cookie.getName(); -------读取cookie的名字
String cookieValue = cookie.getValue();-------读取cookie的值
注:
request.getCookies()方法有可能返回null。一般需要加if判断
(5)cookie的生存时间
1)缺省的(默认的)生存时间
浏览器会将cookie保存在内存,只要浏览器不关闭,cookie就会一直存在。
2)设置生存时间 setMaxAge(int seconds)
注:
单位是秒
①当seconds>0
浏览器会将cookie保存在硬盘上,超过指定时间,浏览器就会删除该cookie。
②当seconds=0
删除cookie,比如要删除一个名称为“items”的cookie
Cookie c = new Cookie("items","");
c.setMaxAge(0);
response.addCookie(c);
③当seconds<0
缺省值(保存在内存)
(6)编码问题
cookie只能存放合法的ascii字符,如果是中文,需要将中文转换成合法的ascii字符。
String URLEncoder.encode(String str,String charset);
String URLDecoder.decode(String str,String charset);
注:
在保存cookie时,不管有没有中文,最好都编码处理。
(7)路径问题
①什么是cookie的路径问题?
浏览器再向服务器的某个地址发送请求时,会比较该地址是否与cookie的路径一致,要访问的地址必须是
Cookie的路径或者子路径时,浏览器才会发送Cookie,只有符合条件的cookie才会被发送。
②cookie的默认路径
等于添加该cookie的组件的路径
比如,/web06_2/biz01/addCookie.jsp
默认路径等于“/web06_2/biz01/”
③匹配方式
要访问的地址必须等于cookie的路径或者其子路径
如:
默认路径等于“/web06_2/biz01/”
/web06_2/findCookie1.jsp 不行
/web06_2/biz01/findCookie2.jsp 可以
/web06_2/biz01/sub/findCookie3.jsp 可以
④修改路径
cookie.setPath(String path)
(8)cookie的限制
①不安全,不要将敏感数据以cookie的方式保存在浏览器端。如果一定要保存,需对敏感数据加密
②可以被用户禁止
③大小有限制(大约4k)
④数量有限制(大约几百个)
⑤只能保存字符串
4、session(会话)
(1)什么是session(服务端为保存状态而创建的一个对象)
浏览器在访问服务器时,服务器会单独创建一个session对象,并为这个对象分配一个唯一的ID称为sessionId,服务器会把这个sessionId以Cookie的方式发送给浏览器,当浏览器再次访问服务器时,会将sessionId发送给服务器,服务器根据sessionId找到对应的session对象。
(2)session的工作原理(就是让服务器能够识别不同的浏览者)
①第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID
new HttpSession();
②把JSESSIONID作为Cookie的值发送给浏览器保存
Cookie cookie = new Cookie("JSESSIONID", sessionID);
response.addCookie(cookie);
③第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器
④服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。
if(找到){
return map.get(sessionID);
}
Map<String,HttpSession>
<"s001", s1>
<"s001,"s2>
⑤如果找到对应编号的session对象,直接返回该对象
⑥如果找不到对应编号的session对象,创建新的session对象,继续走1的流程
结论:通过JSESSION的cookie值在服务器找session对象!!!!!
(3)如何获得session对象
① 方式一:
HttpSession session = request.getSession(boolean flag);
注:
a、当flag=true时
先查看请求当中是否有sessionId,如果有则依据该sessionId找到对应的session对象,找到了返回该对
象,找不到则创建一个新的session对象。如果没有则创建一个session对象。
b、当flag=false时
先查看请求当中是否有sessionId,如果有则依据该sessionId找到对应的session对象,找到了返回该对
象,找不到则返回null。如果没有则返回null。
②方式二:
HttpSession session = request.getSession();
等价于:HttpSession session = request.getSession(boolean flag=true);
(4)HttpSession提供的常用方法
String getId(); --------------------------------------得到session编号(id)
setAttribute(String name,Object value)-----------保存数据
Object getAttribute(String name);-----------------获取数据
removeAttribute(String name);--------------------清除数据
setMaxInactiveInterval(int interval) ---------------设置session的有效时间
invalidate()-----------------------------------------销毁session对象
(5)session超时
①什么是session超时
服务器会将空闲时间过长的session对象删除掉。
②缺省的超时时间限制
一般是30分钟
③可以修改服务器缺省的超时时间限制。
以tomcat为例,可以修改conf\web.xml下
<session-config>
<session-timeout>30</session-timeout>
</session-config>
④setMaxInactiveInterval(int seconds) //设置最大间隔时间
(6)删除session
invalidate();
将浏览器与web服务器之间多次交互(一次请求,一次响应)当做一个整体看待,并且将多次交互涉及的数据即状态保存下来。
2、状态管理的两种常见模式
(1)客户端状态管理技术:将状态保存在客户端。--------cookie技术
(2)服务器状态管理技术:将状态保存在服务器。--------session技术
3、cookie
(1)什么是cookie
服务器临时保存在浏览器端少量的数据
(2)cookie工作原理
浏览器访问服务器时,服务器将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这些数据临时保存下来。
当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。
具体过程:
①服务器创建cookie对象,把会话数据存储到cookie对象中。
new Cookie("name","value");
② 服务器发送cookie信息到浏览器
response.addCookie(cookie);
举例: set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)
③浏览器得到服务器发送的cookie,然后保存在浏览器端。
④浏览器在下次访问服务器时,会带着cookie信息
举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)
⑤服务器接收到浏览器带来的cookie信息
request.getCookies();
(3)创建cookie
Cookie cookie = new Cookie(String name,String value);
response.addCookie(cookie);
注:
name:用于区分不同的cookie的名字
value:Cookie的值
(4)读取Cookie
Cookie [] cookie = request.getCookies(); -----读取客户端发来的全部cookie
String cookieName = cookie.getName(); -------读取cookie的名字
String cookieValue = cookie.getValue();-------读取cookie的值
注:
request.getCookies()方法有可能返回null。一般需要加if判断
(5)cookie的生存时间
1)缺省的(默认的)生存时间
浏览器会将cookie保存在内存,只要浏览器不关闭,cookie就会一直存在。
2)设置生存时间 setMaxAge(int seconds)
注:
单位是秒
①当seconds>0
浏览器会将cookie保存在硬盘上,超过指定时间,浏览器就会删除该cookie。
②当seconds=0
删除cookie,比如要删除一个名称为“items”的cookie
Cookie c = new Cookie("items","");
c.setMaxAge(0);
response.addCookie(c);
③当seconds<0
缺省值(保存在内存)
(6)编码问题
cookie只能存放合法的ascii字符,如果是中文,需要将中文转换成合法的ascii字符。
String URLEncoder.encode(String str,String charset);
String URLDecoder.decode(String str,String charset);
注:
在保存cookie时,不管有没有中文,最好都编码处理。
(7)路径问题
①什么是cookie的路径问题?
浏览器再向服务器的某个地址发送请求时,会比较该地址是否与cookie的路径一致,要访问的地址必须是
Cookie的路径或者子路径时,浏览器才会发送Cookie,只有符合条件的cookie才会被发送。
②cookie的默认路径
等于添加该cookie的组件的路径
比如,/web06_2/biz01/addCookie.jsp
默认路径等于“/web06_2/biz01/”
③匹配方式
要访问的地址必须等于cookie的路径或者其子路径
如:
默认路径等于“/web06_2/biz01/”
/web06_2/findCookie1.jsp 不行
/web06_2/biz01/findCookie2.jsp 可以
/web06_2/biz01/sub/findCookie3.jsp 可以
④修改路径
cookie.setPath(String path)
(8)cookie的限制
①不安全,不要将敏感数据以cookie的方式保存在浏览器端。如果一定要保存,需对敏感数据加密
②可以被用户禁止
③大小有限制(大约4k)
④数量有限制(大约几百个)
⑤只能保存字符串
4、session(会话)
(1)什么是session(服务端为保存状态而创建的一个对象)
浏览器在访问服务器时,服务器会单独创建一个session对象,并为这个对象分配一个唯一的ID称为sessionId,服务器会把这个sessionId以Cookie的方式发送给浏览器,当浏览器再次访问服务器时,会将sessionId发送给服务器,服务器根据sessionId找到对应的session对象。
(2)session的工作原理(就是让服务器能够识别不同的浏览者)
①第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID
new HttpSession();
②把JSESSIONID作为Cookie的值发送给浏览器保存
Cookie cookie = new Cookie("JSESSIONID", sessionID);
response.addCookie(cookie);
③第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器
④服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。
if(找到){
return map.get(sessionID);
}
Map<String,HttpSession>
<"s001", s1>
<"s001,"s2>
⑤如果找到对应编号的session对象,直接返回该对象
⑥如果找不到对应编号的session对象,创建新的session对象,继续走1的流程
结论:通过JSESSION的cookie值在服务器找session对象!!!!!
(3)如何获得session对象
① 方式一:
HttpSession session = request.getSession(boolean flag);
注:
a、当flag=true时
先查看请求当中是否有sessionId,如果有则依据该sessionId找到对应的session对象,找到了返回该对
象,找不到则创建一个新的session对象。如果没有则创建一个session对象。
b、当flag=false时
先查看请求当中是否有sessionId,如果有则依据该sessionId找到对应的session对象,找到了返回该对
象,找不到则返回null。如果没有则返回null。
②方式二:
HttpSession session = request.getSession();
等价于:HttpSession session = request.getSession(boolean flag=true);
(4)HttpSession提供的常用方法
String getId(); --------------------------------------得到session编号(id)
setAttribute(String name,Object value)-----------保存数据
Object getAttribute(String name);-----------------获取数据
removeAttribute(String name);--------------------清除数据
setMaxInactiveInterval(int interval) ---------------设置session的有效时间
invalidate()-----------------------------------------销毁session对象
(5)session超时
①什么是session超时
服务器会将空闲时间过长的session对象删除掉。
②缺省的超时时间限制
一般是30分钟
③可以修改服务器缺省的超时时间限制。
以tomcat为例,可以修改conf\web.xml下
<session-config>
<session-timeout>30</session-timeout>
</session-config>
④setMaxInactiveInterval(int seconds) //设置最大间隔时间
(6)删除session
invalidate();
相关文章推荐
- kindeditor 批量上传 上传失败 thinkphp swfupload session
- 杰奇登录后的东西都是在session里面的
- cookie的secure属性详解
- 浏览器 cookie 限制
- ASP中SESSION无法保存问题的解决办法
- Oracle中的Connect/session和process的区别及关系介绍
- Node.js编程中客户端Session的使用详解
- 浅谈COOKIE和SESSION区别
- 解析PHP的session过期设置
- php中Session的生成机制、回收机制和存储机制探究
- php中将一个对象保存到Session中的方法
- 深入解析Session是否必须依赖Cookie
- 对比分析php中Cookie与Session的异同
- PHP Session机制简介及用法
- 新手菜鸟必读:session与cookie的区别
- 通过nginx配置修改网页cookie属性
- 追加Cookie的Netsclaer策略
- Cookie-free Domains(为什么将静态图片,js,css存放到单独的域名?)
- 编写一个简单登录验证需要记录日志,Servlet中的Cookie