会话
浏览器第一次给服务器发送请求,会话建立;有一方断开,会话结束
会话问题:Http是一个无状态协议,他不会记录每次请求的状态,这就造成了同一个会话的两请求 之间相互独立,彼此没有联系
解决思路: 在客户端或者服务端需要一种技术,来记录下一次会话过程中产生的一些数据
客户端:cookie 服务端:session
cookie
Cookie可以在一次会话的多次请求响应之间共享数据,将数据保存到客户端(浏览器)
方法
方法 | 说明 |
---|
Cookie cookie = new Cookie(“eponine”,“Idover”) | 操作cookie |
response.addCookie(cookie) | 发送cookie |
cookie.setMaxAge() | 设置存活时间,单位为秒(删除cookie实际上是覆盖了一个存货时间为0的cookie) |
setPath() | 指定携带cookie的访问路径 |
setDomain() | 指定域名 |
getCookies() | 获取请求中的cookie |
注意
- Cookie 的名称只能包含 ASCCI 码表中的字母、数字字符。不能包含逗号、分号、空格,不能以 $ 开头。Cookie 的值不支持中文。
- cookie的名称,path,domain全部相同,才认为是相同的cookie
- 存活时间限制 setMaxAge() 方法接收数字
负整数:当前会话有效,浏览器关闭则清除。
0:立即清除。
正整数:以秒为单位设置存活时间。
session
Session可以在一次会话的多次请求之间共享数据,它将数据保存到服务器
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的HttpSession对象
session是一个域对象,用户非活跃状态30分钟或服务器关闭时销毁
当用户第一次发送请求,请求执行request.getSession()方法,服务器就会创建session,并将JSESSIONID回写浏览器;
当用户非第一次发送请求,请求会携带cookie中的JSESSIONID,此时执行request.getSession()方法,服务器会根据JSESSIONID来寻找session空间;如果找到了,就返回已经存在的session;如果未找到,就会创建新的session,并回写一个新的JSESSIONID。
综上所述:服务器会在请求携带的JSESSIONID和服务器本身的JSESSIONID不完全匹配的时候,创建新session