12Cookie、Session-2018/07/24
- 1.保存会话数据
- cookie客户端技术,把每个用户的数据以cookie的形式写给用户各自的浏览器
- HttpSession服务端技术,服务器运行时为每一个用户的浏览器创建一个独享的HttpSession对象,把数据放在里边
- 2.Cookie(客户端技术,只能存字符串,不安全)
- response接口定义了addCookie方法,用于在响应头增加一个相应的Set-Cookie头字段
- request接口也定义了一个getCookie方法,用于获取客户端提交的Cookie
- 属性:
- name名称不能唯一确定cookie,路径可能不同
- value不能用中文
- path保存同一个路径下的cookie都可以取到,也可以通过setPath设置
- ck.setPath("/");
- ck.setPath(request.getContextPath());
- getMaxAge指定cookie最大的生存空间,-1指示该cookie将保留到浏览器关闭为止
- setMaxAge设置最大生存时间
- MaxAge默认存在浏览器的内存中
- 负数:cookie的数据存在浏览器中
- 0:删除,路径要保持一致(setPath),否则可能删错
- 正数:缓存的时间
- 3.HttpSession(服务器端的技术,可以存对象)
- 同一个会话下,可以使一个应用的多个资源共享数据
- 重要方法
- void setAttribute(String name,Object value);
- Object getAttribute(String name);
- void removeAttribute(String name);
- HttpSession.getId():
- setMaxInactiveInterval(int interval) 设置session的存活时间,以秒为单位,默认30分钟
- invalidate() 使此会话无效
- 4.getSession
- 得到一个HttpSession对象,通过getSession方法
- 内部原理
- 1、获取名称为JSESSIONID的cookie的值。
- 2、没有这样的cookie,创建一个新的HttpSession对象,分配一个唯一的SessionID,并且向客户端写了一个名字为JSESSIONID=sessionID的cookie
- 3、有这样的Cookie,获取cookie的值(即HttpSession对象的值),从服务器的内存中根据ID找那个HttpSession对象;
- 5.session状态
- 类实现Serializable,可序列化,服务器重启后数据还在
- 6.客户端禁用Cookie后的会话数据保存问题
- 客户端禁用cookie:浏览器永远不会向服务器发送cookie的请求消息头
- 方法:URL重写。必须对网站的所有地址都重写。 http://url--->http://url;JSESSIONID=111 response.encodeURL(String url); 看浏览器有没有发送cookie请求消息头,没有就重写URL,有就不重写。 request.getSession();必须写,不需要接收
posted @
2018-08-29 21:50
菜白小系瓦
阅读(
93)
评论()
编辑
收藏
举报