ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Session

2022-07-30 16:04:11  阅读:149  来源: 互联网

标签:Session request response session import servlet javax


session常用代码

 HttpSession session = request.getSession();
 session.setAttribute("username", username);
 String username = (String) session.getAttribute("username");
 request.getSession().invalidate();

request.getSession() API执行流程

1.首先第一次访问当前页面,碰到request.getSession()经历了哪些事情呢?第一次访问当前应用,肯定不会有JSESSIONID的cookie请求头,所以此时肯定会创建一个新的session对象,session对象的id值通过Set-Cookie:JSESSIONID=xxx传输给客户端,客户端拿到这个cookie之后,保存下来

2.第二次再次访问当前页面时,再次遇到request.getSession(),发现请求头中有一个有效的JSESSIONID,那么服务器会再应用内去遍历,找到对应JSESSIONID的session对象,然后将这个session对象的引用传递过来。

假如还是之前的客户端,如果把JSESSIONID给丢了,那么再次去访问,还会给它返回原先的session对象吗?

客户端和服务器之间全凭JSESSIONID来沟通。来确定身份

关闭浏览器Session对象会销毁吗

不会。类似于一种不可达的状态

关闭浏览器,重新打开,发现session中的数据访问不到了,原因?

作业:怎么样才能使得关闭浏览器之后还可以访问到之前的数据

关闭服务器Session对象会销毁吗

会。Session里面的数据会不会丢失?不会。

image

当关闭应用之前,会把session的id以及session里面的数据全部序列化到本地硬盘上

再次启动应用时,会读取该序列化文件重新到内存中,读取里面的id值以及对应的数据,会创建新的session对象,然后将这些id以及对应的数据注入到这个新创建的session对象中。

大家再验证的时候,不要通过重新Redeploy或者重启IDEA的tomcat来验证,得不到正确的结果,原因在于IDEA再每次启动的时候都会删除当前目录下的文件,然后重新复制tomcat的配置文件,重新开启一个新的tomcat,SESSION.ser文件并不是被读取到了内存中,而是整个目录被删了,但是这个时IDEA的问题,和我们Session知识点没有任何关系。

还有一种方式,你可以将IDEA里面部署的这个应用用本地tomcat来部署

配置tomcat应用管理系统

/manager/html。前提条件时tomcat的webapps目录下的manager应用不能删除。

<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

再tomcat-users节点下新增如下节点

重启IDEA的tomcat即可。

Session域

Context域、Session域、Request域

Context (和用户无关的,比如说商城的商品分类) > Session(存储用户特有的一些数据) > Request

一个应用中有且只有一个Context对象

一个客户端一般就对应着一个Session对象,当一个客户端访问多个servlet时,返回给它的永远都是同一个session对象

Session的生命周期

session的创建:

​ request.getSession()

session对象存取数据:

​ setAttribute、getAttribute、removeAttribute

session的销毁:

​ 对象的销毁:应用被卸载、服务器关闭

但是对象的销毁并不会导致数据的丢失,数据只有再以下情况下才会真正的丢失:

​ 1.session有一个有效期,默认有效期是30min,如果再这段时间内无人访问,session的数据就会丢失了

​ 2.主动调用session.invalidate()

关闭浏览器,再次打开可以访问到之前的数据
需要把id存储起来,设置时间
image

注销流程

package com.cskaoyan.session;

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;

@WebServlet("/login2")
public class LoginServlet2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        HttpSession session = request.getSession();
        session.setAttribute("username", username);
        response.getWriter().println("登录成功,即将跳转至个人主页....");
        response.setHeader("refresh", "2;url=" + request.getContextPath() + "/info2");

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
package com.cskaoyan.session;

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;

@WebServlet("/info2")
public class InfoServlet2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        HttpSession session = request.getSession();
        //session.invalidate();
        System.out.println(session);
        System.out.println(session.getId());
        String username = (String) session.getAttribute("username");
        response.getWriter().println("<div><span>欢迎您 " + username + "</span>");
        response.getWriter().println("<a href='" +request.getContextPath() + "/logout" + "'>点我注销</a></div>");
    }
}
package com.cskaoyan.session;

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 java.io.IOException;

@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //这部分代码自己没有想到如何实现
        request.getSession().invalidate();
        response.getWriter().println("注销成功,即将跳转至登录页面....");
        response.setHeader("refresh", "2;url=" + request.getContextPath() + "/login.html");

    }
}

标签:Session,request,response,session,import,servlet,javax
来源: https://www.cnblogs.com/hellojianzuo/p/16535145.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有