cookie和session'的学习
2013-11-22 14:43
302 查看
状态管理
1)什么是状态管理
将客户端(一般是浏览器)与服务器之间的多次交互当作一个整体来看待,即将多次操作的数据记录下来。2)怎样进行状态管理
第一种方式:cookie(在客户端管理用户的状态)第二种方式:session(在服务端管理用户的状态)
3)cookie
1)什么是cookie浏览器在访问服务器时,服务器将一些数据以set-cookie消息头的形式发送给浏览器。浏览器会将这些数据保存起来,当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给服务器。通过这种方式,可以管理用户的状态。
2)创建cookie
Cookie cookie = new Cookie(String name,String value);
response.addCookie(cookie);
3)查询cookie
//如果没有cookie,则返回null。
Cookie[] cookies = reqest.getCookie();
String name = cookie.getName();
String value = cookie.getValue;
4)cookie保存时的编码问题
cookie的值只能是ascii字符,如果是中文,需要将中文转换成ascii字符形式。可以使用
URLEncoder.encode()方法和URLDecoder.decode()方法来进行这种转换。
5)cookie的保存时间
cookie.setMaxAge(int seconds);
seconds>0
浏览器会将cookie以文件的方式保存在硬盘式。在超过指定的时间以后,会删除该文件。
seconds<0
默认值,浏览器会将cookie保存在内存里面。只有当浏览器关闭以后,才会删除。
seconds=0
立即删除该Cookie
6)删除cookie
比如要删除一个name为"username"的cookie。
Cookie c = new Cookie("username","");
c.setMaxAge(0);
response.addCookie(c);
7)cookie的路径问题
浏览器在向服务器上的某个地址发送请求时,
会先比较cookie的路径与向访问的路径(地址)是否匹配,只有匹配的cookie,才会发送。
cookie的路径可以通过cookie.setPath(String path)方法来设置。
如果没有设置,则有一个缺省的路径,缺省的路径是生成该cookie的组件的路径。
比如:/appname/addCookie保存了一个cookie
则该cookie的路径就是/appname/addCookie。
规则:
cookie的路径必须是要访问的路径的上层目录或者是与要访问的路径相等,浏览器才会将cookie发送给服器。
一般可以设这setPath("/appname"),表示访问该应用下的所有地址,均会发送cookie。
8)cookie的限制
cookie可以禁止
cookie的大小有限制(4k左右)
cookie的数量也有限制(浏览器大约能保存300个)
cookie的值只能是字符串,要考虑编码问题。
cookie不安全
session
1)什么是session
浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的id,一般称为sessionId)。服务器在缺省情况下,会将sessionId以cookie机制发送个浏览器。当浏览器再次访问服务器时,会将sessionId发送给服务器。服务器依据sessionId就可以找到对应的session对象。通过这种方式,就可以管理用户的状态。2)如何获得session
方式一:HttpSession session = request.getSession(boolean flag);
当flag = true;
服务器会先查看请求中是否包含sessionId,
如果没有,则创建一个session对象。
如果有,则依据sessionId去查找对应的session对象,如果找到,则返回。
如果找不到,则创建一个新的session对象。
当flag = false:
服务器会先查看请求中是否包含sessionId,
如果没有,返回null。
如果有,则依据sessionId去查找对应的session对象,如果找到,则返回。
如果找不到,返回null。
方式二:
HttpSession session = request.getSession();
与request.getSession(true)等价
3)HttpSession借口提供的一些方法
//获得sessionId。String session.getId()
//绑定数据
session.setAttribute(String name,Object obj);
//obj最好事先Serializable接口(服务器在对session进行持久化操作时,比如钝化,激活,会使用序列化协议)
Object session.getAttribute(String name);
//如果name对应的值不存在,返回null。
session.removeAttribute(String name);
4)session超时
服务器会将超过指定时间的session对象删除(在指定的时间内,该session对象没有使用)方式一:
session.setMaxInactiveInterval(int seconds);
方式二:
服务器有一个缺省的超时限制,可以通过相应的配置文件来重新设置。
比如可以修改tomcat的web.xml(tomcat_home/conf下面)。
<session-config>
<session-timeout></session-timeout>
</session-comfig>
另外,也可以只修改某个应用的web.xml。
5)删除session
session.invalidate()相关文章推荐
- 黑马程序员_学习日记72_724ASP.NET(ViewState、Cookie、Session、登录、分页存储过程)
- 关于session和Cookie的学习总结
- (6)nodejs学习---cookie和session
- JMeter学习(二十)JMeter处理Cookie与Session
- http协议学习-Cookie和Session
- session和cookie学习笔记
- JavaEE学习05--cookie&session
- php 学习笔记 -- Cookie 和 Session(六)
- PHP的学习--cookie和session
- asp.net学习——page类属性Request、Response、Server、Session、Cookie
- 会话技术 cookie和session 学习笔记
- Session和Cookie学习笔记
- PHP 用查询字符窜,cookie 和session 保存页面状态 的总结学习
- 【PHP进阶篇 未完】6.会话控制(session与cookie)--慕课网【学习总结】
- 【Todo】Java学习笔记 100==100 & Reflection API & Optional类详解 & DIP、IoC、DI & token/cookie/session管理会话方式
- Java Web 内幕学习系列 十、深入理解Session与Cookie
- java学习之Servlet之--Cookie,Session,Application
- J2EE学习总结之——会话数据管理cookie和Session
- 会话技术 cookie和session 学习笔记
- cookie 与 session深入学习