WEB应用程序开发(六)创建Session对象与实现界面安全退出/登录功能

什么是session

Session对象是javax.servlet.http.HttpSession的实例

它在第一个JSP页面被装载时自动创建,完成会话期管理。

从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。

Servlet API中,定义了HttpSession接口,用来封装会话对象, HttpSession是接口,会话对象是Web容器创建的,在Servlet中使用
HttpServletRequest中的方法获得会话对象

public HttpSession getSession():获取跟当前请求相关的session,如果不存在session,就创建一个新的session对象返回

下来是展示Session实现会话机制的过程

创建Session思维图

在这里插入图片描述

代码方面新增两行代码,放置在之前设置好的LoginServlet对象中

  //获取服务器生成的session对象
                HttpSession httpSession=req.getSession();
                //向session对象设置一段键值,登陆成功后将用户信息储存到一个对象的session对象中
                httpSession.setAttribute("user",user);
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = null;
        try {
            resp.setContentType("text/html;charset=utf-8");//响应格式设置
            req.setCharacterEncoding("utf-8");//设置post请求数据解码格式
            String account = req.getParameter("account");
            String password = req.getParameter("password");
            System.out.println(account);
            System.out.println(password);
            LoginDao loginDao=new LoginDao();
            User user= loginDao.checkLogin(account,password);

            out= resp.getWriter();
            if(user!=null){
                
                //获取服务器生成的session对象
                HttpSession httpSession=req.getSession();
                //向session对象设置一段键值,登陆成功后将用户信息储存到一个对象的session对象中
                httpSession.setAttribute("user",user);

                Gson gson=new Gson();
                String s=gson.toJson(user);
                System.out.println(s);
                out.println(s);
            }else {
                out.println(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("服务器响应异常");
        }
    }
}

代码测试与结果

开始进入测试阶段

1、当容器创建一个新的HttpSession对象后,即生成一个随机数,称为会话ID,并将ID值封装成一个名字为JSESSIONID的session,返回给客户端

在这里插入图片描述

2、调用request.getSession方法获得会话对象时,容器先从request中获取JSESSIONID值,根据JSESSIONID值查找到对应的会话对象,返回使用。

  @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        User user=(User)session.getAttribute("user");
        session.invalidate();//销毁浏览器
    }

success界面只进行请求不作任何响应

<input type="button" value="测试" οnclick="test()">
function test() {    $.get("login",function (res) {    })}

在这里插入图片描述

3、如果没有获取到JSESSIONID值,认为当前的请求没有相关联的会话对象,重复步骤1

注意:利用不同的浏览器同时向网页服务器发送请求,生成出来的Session对象是不同的

Session方法

Session中还有一系列方法,可以参考使用

在这里插入图片描述

Session生命周期

创建方式

	     第一次访问Servlet时在服务器端创建

销毁方式

一. 服务器关闭

二. 长时间不调用自动销毁

会话对象是容器创建的,并保存在容器中,如果客户端连接到服务器后,却置之不理,不做任何操作,那么容器维护这些会话对象将占用很多资源。因此,容器都会在默认时间内销毁会话对象,多数容器默认30分钟销毁会话对象,可以通过以下两种方式进行更改销毁时间
1. 可以在web.xml中进行配置,修改默认时间。例如,修改为50分钟销毁。

<session-config>
<session-timeout>50</session-timeout>
</session-config>

2.可以利用上面的方法

SetMaxInactiveInterval (int interval )设置session的最大非活动时间,以秒为单位,超时将被销毁。

三. 调用invalidate()方法 销毁session

  @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        session.invalidate();//销毁浏览器
    }

安全退出

我们来利用销毁清除留在服务器上的Session信息达到安全退出的目的

在这里插入图片描述

在这里插入图片描述

Session对象已经被销毁了无法找到之前id

  function exit() {
          if(confirm("您确定要退出吗")){
          //删除前端用户信息
          window.sessionStorage.removeItem("user");
          $.get("login",function (res) {
              location.assign("login.html")
          })
      }
      }
<input type="button" value="安全退出" onclick="exit()">

我们也可以利用此方法实现安全登录的目的

     $(function () {
        var str=window.sessionStorage.getItem("user");
         //前端判断用户是否登录
          if(str==null){
              location.replace("login.html");
          }

        var user=$.parseJSON(str);
        $("#accountId").html(user.account);


      })

如果没有登录想要通过链接地址的方式强制进入,界面就会进行闪退,退回事先设置好的Login.html登录界面

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>