java暑期学习笔记(12)

# 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();必须写,不需要接收

猜你喜欢

转载自www.cnblogs.com/yaopeiyun/p/9557155.html
今日推荐