您的位置:首页 > 编程语言 > Java开发

JavaWeb——Cookie和Session(会话技术)

2019-05-22 17:58 465 查看

1.会话技术

1.1.概念

会话
:一次会话中包含多次请求和响应
一次会话
:浏览器第一给服务器资源发送请求,会话建立,直到有一方断开为止
会话的功能
:在一次会话的范围内的多次请求间共享数据

1.2.方式

  • 客户端会话技术:
    Cookie
    ,将来将数据存在客户端
  • 服务器端会话技术:
    Session
    ,将来将数据存在服务器

2.Cookie

Cookie:客户端会话技术,将数据保存在客户端

2.1.Cookie快速入门

使用步骤:

  • 创建Cookie对象,绑定数据

new Cookie(String name,String value)

  • 发送Cookie对象

response.addCookie(Cookie cookie)

  • 获取Cookie,拿到数据

Cookie[] request.getCookies()

2.2.Cookie实现原理

2.3.Cookie的细节

2.3.1.一次可不可以发送多个Cookie

可以
,创建多个Cookie对象,使用response对象的addCookie方法多次发送Cookie即可

2.3.2.Cookie在浏览器中保存多久

  • 默认
    情况下,当
    浏览器关闭后
    ,Cookie数据被销毁
  • 设置Cookie声明周期
    ,使他持久化存储

用Cookie对象调用setMaxAge(int seconds)方法

  • 正数:将Cookie数据
    写到硬盘文件中持久化存储
    ,second表示cookie存活时间,单位是秒
  • 负数:默认值,存
    在浏览器内存中
    ,浏览器一关闭就销毁Cookie数据
  • 零:
    删除Cookie数据

2.3.3.Cookie能不能存中文

Tomcat8
之前,Cookie中不能直接存储中文数据(需要将中文数据转码——一般采用URL编码),在Tomcat8之后,Cookie支持中文数据。

2.3.4.Cookie共享问题

  • 1.假设在一个Tomcat服务器中部署了多个Web项目,那么在这些项目中Cookie是否共享?
  • 默认情况下Cookie不能共享
  • setPath(String path):设置Cookie的获取范围,默认情况下设置当前项目的虚拟目录,如果要共享,则将path设置为:"/"
  • 2.不同的Tomcat服务器间Cookie共享问题

setDomain(String path):如果设置一级域名相同,那么多个服务器间Cookie共享

2.4.Cookie的特点

  • Cookie
    存储数据在客户端浏览器
  • 浏览器对于单个Cookie的大小有限制
    (一般4K左右,和浏览器有关)以及
    对同一个域名下的总Cookie数量也有限制
    (一般20个左右,和浏览器有关)

2.5.Cookie的作用

  • Cookie一般用于
    存储少量的不太敏感的数据
  • 在不登录的情况下完成服务器对客户端的身份识别
    (主要作用)

3.Session

3.1.概念

Session:

服务器端会话技术
在一次会话的多次请求间共享数据
将数据保存在服务器对象中

3.2.Session快速入门

  • 获取Session对象
    :HttpSession session = request.getSession();
  • 使用HttpSession对象:
  • Object getAttribute(String name)
  • void setAttribute(String name,Object value)
  • void removeAttribute(String name)

3.3.Session原理分析

服务器如何确保在一次会话范围内多次获取的Session对象是同一个?

第一次获取Session,没有Cookie,会在内存中创建一个新的Session对象,他会有一个

唯一的ID
,接下来做响应时,会发送响应头:set-cookei:JSESSIONID=唯一的ID,客户端此时将Cookie信息存到浏览器,下次再次访问项目其他资源时
通过cookie请求头
带过去了JSESSIONID,服务器自动获取cookie信息在根据这个信息查看内存中有没有
和JSESSIOID对应的Session对象
,如果找到了,getSession方法就找到了这个对象并返回,所以两次的Session是同一个,
服务器就是通过Cookie确保一次会话中获取的Session是同一个

3.4.Session的细节

3.4.1.当客户端关闭后,服务器不关闭,两次获取Session是否为同一个

  • 默认情况下不是
  • 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让Cookie持久化保存
//希望客户端关闭后再次获取Session能相同
Cookie cookie = new Cookie("JSSIONID",session.getId());
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);

3.4.2.客户端不关闭,服务器关闭后,两次获取的Session是同一个吗

不是同一个
(就是偶然相同也是巧合),但是要确保数据不丢失(
session的钝化和活化
——Tomcat已经完成了钝化和活化工作)

  • session的
    钝化
    :在服务器正常关闭之前,将session对象
    序列化
    到硬盘上
  • session的
    活化
    :在服务器启动后,将session文件转化(
    反序列化
    )为内存中的session对象即可
  • 注意:IDEA可以完成钝化但是无法活化成功,要依靠本地的TomCat服务器去完成钝化和活化,但是实际开发中也不会在IDEA里面部署项目,所以关系不大

3.4.3.Session什么时间被销毁

  • 服务器关闭
  • session对象调用invalidate
  • session默认失效时间是30分钟(可以在配置文件中修改(如下前两张图),也可以在项目中配置(配置内容如下第三个图))


3.5.Session的特点

  • Session用于
    存储一次会话的多次请求的数据
    ,存储在
    服务器端
  • Session
    可用于存储任意类型、任意大小的数据

4.Session与Cookie区别

1d25c
Session Cookie
存储位置 服务器端 客户端
大小限制 没有数据大小限制 有限制,与具体浏览器相关
安全性 相对安全 相对不安全
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: