DAY4
前言
本文是自己对于暑假学习的一个总结,Session的一些方面的学习,若有错误之处,希望指正
提示:以下是本篇文章正文内容,下面案例可供参考
一、Session是什么?
总体的解释:在 计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。 以及如果需要的话,可能还有一定的操作空间。 需要注意的是,一个Session的概念需要包括特定的客户端,特定的 服务器 端以及不中断的操作时间。
通俗一点来说,就是一种运行在服务器端的cookie技术,是一种存储内容在服务器端的存储数据方式,并且是一种对于不同次的请求都有效果的一种存储数据的方式。
二、Session内容实例编写
1.Session相关知识点
1、如何解决同一个用户的不同请求问题?使用Session技术处理
原理:当用户发送请求到服务器时,服务器会创建一个Session对象在服务器中,并且这个Session对象是专属与当前这个用户的,而后将当前的这个Session对象发送给浏览器,然后浏览器利用cookie技术将当前的Session对象和Jsessionid存储在浏览器中,并且这个JSESSIONID就是为了区分不同用户的不同的请求,即可以理解为一个用户只用一个JSESSIONID
特点:1.是服务器端的存储技术,但是依赖与cookie技术(JSESSSIONID)
2.有效期为一次对话
使用流程:1.创建Session对象(并且获取Session对象) HttpSession hs = req.getSession();若在请求发送完后发现请求当中有SessionID那么就直接响应该对象,不是的话就创建一个新的对象
2.Session的有效期一般是30分钟(默认时长)
3.设置Session的有效时长:hs.setMaxInactiveInterval(int seconds);其中单位是seconds,即为秒,那么我们传入数据是是以秒为单位的。
4.hs.invalidate();为强制销毁Session对象
5.Session对象的存储:hs.setAttribute(String name,Object value);
6,Session对象的获取:hs.getAttribute(String name);
注意:存储和获取时间可以不固定,但是存储和获取的相对时间一定是固定的,即一定要先存储再获取
使用时机:一般用户在登陆web应用的时候会将该用户的当前请求的数据放在服务器端供给该用户的不同请求使用
存储和创建Session对象如下(仅做示例)
package gy;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* created by Farewell on 2021/8/1
* Session学习
* 如何将一个用户的不同请求处理的数据共享问题?
* 使用session技术的原理
* 原理:用户第一次访问服务器,服务器会创建一个session对象给用户,然后将该对象的JSESSIONID使用Cookie技术存储到浏览器中,保证了一个用户的
* 不同请求能够共享同一组数据,获取到同一个对象,而设置JSESSIONID的原因就是为了防止不同用户的不同Session对象混乱.
* 特点:服务器端的存储技术,而cookie是一门浏览器端的存储技术就是这样理解的
* 2.依赖与Cookie技术的(JSESSIONID)
* 3.有效期为一次会话
* 使用:1.创建session对象(获取Session对象)
* HttpSession hs = req.getSession();
* 如果请求中有Session id就直接响应该对象,不是的话就创建一个新的
* Session的默认时效是30分钟
* 设置session的存储时间
* hs.setMaxInactiveInterval(int seconds)的方法是设置时间的,单位是seconds
* 注意:销毁时间是在指定的时间内session对象没有被使用然后再销毁,如果被使用了则就是重新计时(前一个默认时间也是)
* 设置session强制失效对象:hs.invalidate()这个函数直接强制失效
*
* 2.存储session数据
* 存数据:hs.setAttribute(String name,Object value);(利用键值对存储)
* 取数据:hs.getAttribute(String name);
* 注意:存储的数据在存储和取数据的时间不同,请求不同,但是存储一定要先于取数据;
* 使用时机:一般用户在登陆web项目是会将用户的个人信息存储到session中供给该用户的其他请求使用
* 总结:session解决了一个用户的不同请求的数据共享问题,只要在JSESSIONID不失效和session对象不失效的情况下都可以存在
* * (JSESSIONID是存储在Cookie的临时存储空间中,也就是浏览器中,关闭浏览器后就会失效
* * 这句话还可以作为如果session对象失效了也会重新创建一个session对象并且将其JSESSIONID存储在浏览器中)
* 作用域是一次会话,在session和JSESSIONID不失效的情况下整个项目之内
* 如何衡量session失效?判断JSESSIONID和后台所有的ID是否相同即可
*/
@WebServlet("/Session1")
public class SessionServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("test/html;charset=utf-8");
// resp.setCharacterEncoding("utf-8");
String name = "zhangsan";
HttpSession hs = req.getSession();
//存储数据
hs.setAttribute("name",name);
resp.getWriter().write("session学习");
// hs.setMaxInactiveInterval(5);
// hs.invalidate();
}
}
2.获取数据
代码如下(示例):
package gy;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* created by Farewell on 2021/8/2
*/
@WebServlet("/Session2")
public class SessionServlet2 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession hs = req.getSession();
System.out.println("此时的一个session:"+hs.getAttribute("name"));
}
}
总结
Session是解决了同一个用户的不同请求之间的数据共享问题,只要在JSESSIONID不失效和Session对象不失效的情况之下都会存在(注意JSESSIONID是存储在浏览器也就是cookie中的,关闭浏览器之后回失效),但是关闭浏览器之后cookie是失效了,但是在再一次打开浏览器的时候会再次创建一个SessionID,也可以判断当前的JSESSIONID和后台的ID是否相同,Session的作用域是再同一个项目内(不失效的情况之下)。