会话技术从使用到细节的处理

会话技术是什么

会话:一次会话(浏览器一次给服务器发送多次请求,会话建立,直到有一方断开连接)中包含多次请求和响应

功能:在一次会话*享多次请求间的数据

分类:

1.客户端会话技术:Cookie
2.服务器端会话技术:Session

客户端会话技术

1.基本使用

创建Cookie对象,绑定数据,是一个键值对的形式,值得注意的是Cookie的构造方法传入的两个参数都是字符串,Cookie并不允许存储除字符串以外的数据。

new Cookie(String name, String value);
// 设置头
setName(String name);
// 设置值
setValue(String value);

2.发送Cookie对象给客户端保存

response.addCookie(Cookie cookie);

3.获取客户端存储的Cookie对象,返回一个数组

Cookie[]	request.getCookies();

Cookie的细节

1、一次可以发送多个cookie,只需要都给它使用addCookie方法就行
2、 cookie在浏览器中可以保存多久的是时间?

       在默认情况下,当关闭浏览器后,Cookie将被销毁

3、持久化存储

      &nbsp调用方法Cookie对象的方法setMaxAge(int seconds),单位时秒,有三种结果

  • 正数:表示将Cookie数据写入硬盘文件文件中,持久化存储,当到达指定的时间后cookie文件自动销毁
  • 负数:默认值,当浏览器被关闭时自动销毁
  • 0:删除cookie信息

4、Cookie能不能存储中文?

      &nbsp在tomcat8.0之前,cookie是不能存储中文的,8.0以后的版本是支持中文的

5、cookie共享问题
  • 假设在一个tomcat服务器中,部署了多个项目,那么在这些项目中cookie是否能被共享?
           在默认情况下是不能被共享的,共享需要设置cookie的获取范围,语法:setPath(String path),默认情况下它的是是当期目录,将它的值设置为"/",表示根目录
  • 不同tomcat服务器间cookie共享问题
          &nbsp语法:setDomain(String path),如果设置一级域名相同,那么多个服务器之间就可以共享,如:setDomain(".baidu.com") 就是一级域名

注:cookie存储数据在客户端的浏览器上;浏览器对单个cookie大小有一定的限制(约4kb左右),同一域名下的总cookie数量也有一定的限制(20个);最后cookie一般存储小量不太敏感的数据,可以用于在不登录的情况下服务器对客户端身份的识别

服务器会话技术

  1. 基本语法
// 通过request获取Session
Session session = request.getSession();

//  获取指定键的值,
Object	session.getAttribute(String name);

// 存储一组数据,Session对存储的值没有类型的限制,大小同样没有,但不建议存储大型数据
setAttribute(Sring name, Object value);

// 通过键删除指定的键值对
removeAttribute(String name)

注:是根据当期浏览器存储,不会出现多个浏览器共享的情况

Session的细节处理

1、在客户端关闭后,服务器不关闭,两次获取的Session为同一个?

       在默认情况下不是。如果需要相同则需要先创建一个Cookie对象,将其的键设置为“JSESSIONID”,设置一下cookie的存活时间 (因为这样会关闭浏览器,在默认情况下当浏览器被关闭时cookie对象就会被销毁) ,语法为:

Cookie cookie = new Cookie("JSESSIONID", session.getID);
// 设置存活时间为1小时
cookie.setMaxAge(60 * 60);
// 将创建的Cookie对象发送给浏览器
response.addCookie(sookie);

实现原理:在获取Session对象时如果响应头中没有指定“JSESSIONID”,那么就会创建一个新的Session对象,如果使用Cookie将原本的“JSESSIONID“存储起来,那么在获取时响应头发现了存储在里面的Session对象的id,那么它就会去找到指定的那个Session对象将其返回

2、客户端不关闭,服务器关闭,两次获取的session对象还是一个吗?

        不是,但会确保数据不丢失。tomcat会自动完成对应的工作:1.session钝化,在服务器正常关闭前,会将session对象序列化到硬盘上;2.session活化,在服务器启动后,会将钝化好的session文件转换后加载到内存中
注:idea并不能完成活化的过程,钝化是可以的。原因:在运行过程中产生的临时文件会放在work目录下,而idea会将上次的work文件先删除掉,再创建一个新的

3、session在什么时候被销毁

       1.服务器关闭
       2.session调用invalidate();
       3.session过失效时间(设置其失效时间方法setMaxInactiveInterval(int time)),默认时间时30分钟

Cookie与Session的区别

1.session存储数据在服务器端,cookie在客户端
2.session没有数据大小,Cookir有
3.session数据安全,Cookie相对

上一篇:TEST Phone WebView 通过 post 加载 url,自定义请求 header,获取或设置 cookie


下一篇:python爬虫学习7