Session和Cookie(会话跟踪技术),从何而来,又将去往何处
> >为什么要使用会话跟踪技术
因为Http协议是无状态的,请求和请求之间是无法共享数据的,这样便无法知道会话是从什么时候开始,又是从什么时候结束的,也无法知道是谁发起了会话。
这时我们便需要使用到会话跟踪技术(Session、Cookie),来实现请求之间的数据共享。这也是平时为什么我们在浏览器中登录一次,就可以在浏览器中到处操作的原因。
注:
【1】HTTP协议:定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型,规定了如何去请求如何去响应。
【2】会话:会话是指一个终端用户与交互系统进行通讯的过程。即用户打开浏览器,访问了网站,做了一些操作(查数据,点击了a标签),到关闭浏览器的这个过程,就可以称之为一个会话。
>> Cookie
>>>>>>>>>>>>>>>>>>>>>>>>>> 什么是Cookie >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Cookie的原理
一种客户端技术,服务器(程序)把用户数据以cookie的形式,存到用户各自的浏览器;用户再次使用浏览器去访问服务器中的web资源的同时,会把浏览器中的cookie带回去,这时,服务器会把cookie中的数据读取出来,识别后对不同的浏览器(用户)做处理。
cookie存在浏览器
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 如何使用Cookie >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1、如何创建CooKie
在程序中直接new
Cookie cookie = new Cookie(String name,String value);
(注)name : 给要共享的数据设置一个唯一的标识
value: 要共享的数据
例如:Cookie cookie = new Cookie(“currentName”,”xiaoming”);
2、如何把 Cookie 写给浏览器
response对象.addCookie(cookie);
例如:
3、如何去获取Cookie 中的数据
Cookie[] cs = request对象.getCookies();
遍历Cookie 数据,得到name 为currentName 的value 数据.
cookie.getName() : 获取当前Cookie 对象的name值
cookie.getValue() : 获取当前Cookie 对象的value 值
4、如何修改之前的Cookie
两种方式:
(1)再次创建一个新的Cookie 对象,name 跟要修改的Cookie 的name相同
(2) 直接修改Cookie 的value 值
cookie对象.setValue(newValue);
注:这两种方式都会重新把Cookie响应给浏览器,然后去覆盖旧的Cookie
5、如何设置Cookie的有效时间
cookie.setMaxAge(int expiry)
参数(expiry 值)负数 :不保存Cookie(会话Cookie,默认)
0 : 删除Cookie
正数 :要保存的时间
删除Cookie(需要重新响应给浏览器去覆盖旧的Cookie):
cookie.setMaxAge(0)
6、Cookie的配置
cookie.setPath()
Cookie中配置path可以设置:限制访问哪些资源时会带Cookie
实例:
(1)默认path:在创建Cookie 的当前资源的目录下的资源访问会带上Cookie
例:在目录/cookie/login创建Cookie ,那么只有/cookie/ 下的资源访问会带上Cookie
(2)自定义path:cookie.setPath();
例:cookie.setPath(“/”) : / 下的资源访问都会带上Cookie(所有的资源的访问都需要带上Cookie )
7、一些常见的问题
(1)Cookie的中文问题
使用 URLEncoder 和 URLDecoder 去设置编码格式
(2)Cookie的跨域问题
>> Session
>>>>>>>>>>>>>>>>>> 什么是Session >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Session,服务器端技术,可以让服务器在运行时为每一个用户的浏览器创建一个其独享的Session对象,存储该用户的数据。
特别地,session本质上就是cookie。
Session的执行原理
(1)浏览器第一次访问时,服务器端程序创建Session 对象存储用户的一些数据(数据是存储在服务端的);
(2)服务器把Session 对象的地址以Cookie 的形式响应给浏览器;
(3)浏览器再次访问服务器端资源就带上次Cookie(Session 的地址) 过去;
(4)服务器端获取到Session 的地址就可以直接操作上次地址上的空间(上次的Session),拿到该用户的数据。
>>>>>>>>>>>>>>>>>>> 如何使用Session >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1、获取/创建 Session对象
HttpSession req对象.getSession() : 获取session 对象,如果存在则返回Session 对象, 不存在则创建一个新的session对象并返回
HttpSession req对象.getSession(true) : 获取session 对象,如果存在则返回Session 对象, 不存在则创建一个新的session对象并返回
HttpSession req对象.getSession(false) : 获取session 对象,如果存在则返回Session 对象
不存在则返回null
2、设置共享数据
session对象.setAttribute(String name,Object value);
(注) name : 给共享的数据起一个唯一的标识
value : 要共享的数据
3、获取共享数据
session对象.getAttribute(String name);
(注) name : 要获取的共享数据的name
4、删除共享数据
(1)删除指定名称的共享数据 : session对象.removeAttribute(String name);
(2)销毁session 对象 : session对象.invalidate();
5、Session设置超时时间(超过这个时间不做操作就销毁session对象)
默认超时时间是30分钟,
修改超时时间: session对象.setMaxInactiveInterval(15) ;
注:使用的单位是秒。
6、使用Session的一些注意事项(补充)
(1)在分布式应用中使用Session ,Session中的对象需要实现 java.io.Serializable接口。(这涉及到远程调用的序列化问题)
(注)序列化 :把对象信息存储为二进制 。
反序列化 :把二进制信息恢复成对象。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/117863.html