Session

25 篇文章 0 订阅

 

1. 简介

  1. Session即HttpSession,主要用来保存用户信息

  2. 由服务器创建,保存在服务器

  3. Session 也是jsp 的一个内置的域对象,

2. 运行原理

  1. 浏览器向服务器发送请求时,服务器会创建一个Session对象,并且这个Session对象具有唯一id

  2. 同时服务器也会创建一个cookie对象,会将Session对象的id赋值到Cookie中, name = "JSESSIONID", value = id

  3. 服务器会将这个Cookie对象发送给浏览器

  4. 浏览器在之后发送请求时,都会携带这个Cookie对象

  5. 服务器根据Cookie对象中的的JSESSIONID的值,获取对应的Session的id值,从而匹配session对象,区分不同的用户。

特点

  1. Session中的id是自动添加的,name 和 value需要设置

  2. 存放Session id Cookie 的JSESSIONID 是自动创建的

3.创建、获取与删除

3.1 创建

  1. 对于html页面,需要在Servlet中手动创建

     HttpSession session = request.getSession();
  2. 对于jsp页面,会自动创建session,因为JSP初始化的时候,会先解析成一个java文件,在其对应的类中会调用 jspServer() 初始化session对象

     final javax.servlet.jsp.PageContext pageContext;javax.servlet.http.HttpSession session = null;
  3. request.getSession() 创建 or 获取session的依据

    看浏览器发送请求所携带的Cookie中是否有JSESSIONID

    • 有,则获取

    • 没有,创建一个新的Session对象

3.2 取值

  1. Servlet中获取

     Object name = request.getSession().getAttribute("name");
  2. 在jsp中获取

     ${sessionScope.name}

3.3删除

  1. removeAttribute()

     HttpSession session = request.getSession();// 删值不删键session.removeAttribute("name");
  2. invalidate()

     // 1.删除session// 2.创建一个新sessionrequest.getSession().invalidate();

4. 活化与钝化

  1. Session的钝化:服务器关闭时,把内存中的Session及其数据 序列化到磁盘的过程 因此当存放的value是一个对象时,该对象要先实现序列化接口(Serializable),否则这个值会钝化失败

  2. Seesion的活化:服务器启动时,把磁盘中保存的数据反序列化到内存中的过程

  3. idea中的活化,重启服务器,idea会将本地中保存的项目文件信息先删掉再重新创建,这一过程会导致钝化时保存的Session文件删掉,因此可以更改Session钝化时产生的文件夹位置,解决idea活化失败的问题

    • 在本地Tomcat的/conf 下的context.xml文件的Context节点下添加

       

       <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true">    <Store className="org.apache.catalina.session.FileStore" directory=w/></Manager>

 

5. Session持久化

  • 浏览器关闭Session消失原因: Cookie是会话级别的,Cookie没了导致JSESSIONID找不到了=> Session消失

5.1 在web.xml全局配置

配置全部的Seeion最大有效时间,单位:分钟

 <session-config> <session-timeout>3</session-timeout></session-config>

5.2 配置当前Seeion

单位:秒

 HttpSession session = request.getSession();// 配置最大有效时间session.setMaxInactiveInterval(20);

在jsp中获取Session最大有效时间

 ${pageContext.session.maxInactiveInterval}

5.3 持久化JSESSIONID

 Cookie[] cookies = request.getCookies();if (cookies != null) { for (Cookie cookie : cookies) {     if (cookie.getName().equals("JSESSIONID")) {         cookie.setMaxAge(60 * 30);         response.addCookie(cookie);     } }}

6. application 于session的区别

  1. application 存放于获取数据

     // 存放getServletContext().setAttribute("msg", "乔布斯入职锤子科技");// 获取Object msg = getServletContext().getAttribute("msg");
  2. session是会话变量,基于个人用户的,对单个用户有效,默认的有效时间是30分钟,也可以设置最大有效时间。在一个web应用中可以有多个session对象,每个用户对应了一个session对象

  3. application是全局变量,是基于整个web应用的,对所有用户有效。在服务器启动时创建,服务器停止时销毁。一个web应用只有一个application对象。

7. cookie与session的区别

  1. Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端

  2. Cookie有大小限制,浏览器所存储的cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关

  3. Cookie只能保存字符串数据,Session可以保存任意类型数据

  4. Cookie有安全隐患,通过拦截或本地文件找到你的cookie后可以进行攻击

  5. Session是有保存在服务器端上会存在一段时间才会消失,如果Session过多会增加服务器的压力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值