JavaWeb_05_会话控制

会话控制

Cookie简介

  • Cookie是服务器创建的保存在浏览器端的用于区分不同用户的对象
  • Cookie的运行原理
    • 1)第一次发送请求时在服务器端创建一个Cookie对象
    • 2)将Cookie对象发送给浏览器
    • 3)以后再发送请求就携带着该Cookie对象
    • 4)服务器就根据不同的Cookie对象来区分不同的用户

创建Cookie对象

  • 在服务器端创建Cookie对象时可以指定Cookie对象的有效时间,默认的有效时间是一次会话
  • 在服务器端创建Cookie对象时还可以指定Cookie对象的有效路径,默认的有效时间是当前项目的根目录
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        //1.创建Cookie对象
        /*
            Cookie的名字不能使用中文,Cookie的值可以使用中文,但是需要指定字符集进行编码,
            获取时还需要指定字符集进行解码,所以不建议使用中文
         */
        Cookie cookie = new Cookie("user", "admin");

        /*
            默认Cookie对象是会话级别的,关闭浏览器Cookie对象将失效,我们可以通过
            setMaxAge()设置Cookie对象的有效时间
            setMaxAge(int age)
             age>0:Cookie对象在age秒后失效
             age=0:Cookie对象立即失效
             age<0:默认,会话级别的Cookie对象
         */
        Cookie cookie1 = new Cookie("user2", "persistCookie");
        cookie1.setMaxAge(-1);

         /*
            Cookie对象的默认的有效路径是项目的根目录,即只要访问项目根目录下的内容,都会携带
            Cookie对象,我们可以通过setPath()方法设置Cookie的有效路径
         */
        Cookie cookie2 = new Cookie("user3", "pathCookie");
        //设置Cookie对象的有效路径
        cookie2.setPath(request.getContextPath()+"/pages");
        //2.将Cookie对象发送给浏览器
        response.addCookie(cookie);
        response.addCookie(cookie1);
        response.addCookie(cookie2);

    }

获取Cookie对象

  • 因为每次发送请求在请求头中携带Cookie对象,所以获取Cookie对象通过request来获取
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取所有的Cookie对象
        Cookie[] cookies = request.getCookies();
        //遍历得到每一个Cookie对象
        if(cookies != null){
            for (Cookie cookie : cookies) {
                //获取Cookie的名字
                String name = cookie.getName();
                //获取Cookie的值
                String value = cookie.getValue();
                System.out.println("Cookie的名字是:"+name);
                System.out.println("Cookie的值是:"+value);
            }
        }
    }

Cookie的用途

  • 广告推荐
  • 免登录

Cookie的缺陷

  • 1)Cookie是明文的,不安全
  • 2)不同的浏览器对Cookie的大小和数量有限制
  • 3)每次发送请求携带过多的Cookie对象费流量
  • 4)Cookie对象的value值只能是String类型,不能保存一个对象
  • 所以就有了Session

Session简介

  • Session即HttpSession,在服务器端创建,用来保存用户信息
  • Session的运行原理
    • 1)第一次发送请求时在服务器端创建一个Session对象,该对象有一个全球唯一的ID
    • 2)在创建Session对象的同时会创建一个特殊的Cookie对象,该Cookie对象的名字是一个固定值:JSESSIONID;该Cookie对象的值就是哪个Session对象的ID值,并将这个特殊的Cookie对象发送给浏览器
    • 3)以后再发送请求就会携带着这个特殊的Cookie对象
    • 4)服务器根据这个特殊的Cookie对象的value值从服务器中寻找与之对应的Session对象,以此来区分不同的用户

Session对象的创建与获取

  • 如果项目中是HTML页面,只有在Servlet中通过request.getSession()才会创建Session对象
  • 如果项目中是JSP页面,因为Session是JSP的隐含对象,所以访问JSP首页时即创建了Session对象
    • 一访问index.jsp页面就会创建Session对象,该对象是在index_jsp.java文件中的_jspService()方法中创建的
    • 一次会话中只能使用一个Session对象,Session对象一旦创建,在没有失效的情况下在哪儿获取得到的都是同一个
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建或获取Session对象
        HttpSession session = request.getSession();
        //获取Session对象的id
        String id = session.getId();
        System.out.println("Session对象的ID值是:"+id);
        //创建User对象
        User user = new User(1, "admin");
        //向session域中添加用户信息
        session.setAttribute("user",user);
    }

持久化名字为JSESSIONID的Cookie对象

  • 由于Cookie默认是会话级别的,当我们关闭浏览器之后Cookie将失效,再次打开浏览器将不在携带那个Cookie对象,也就无法找到与之对应的Session对象,进而就找不到Session中保存的用户,我们可以通过持久化JSESSIONID的Cookie对象达到找到Session对象的目的
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Cookie对象
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for (Cookie cookie : cookies) {
                //获取Cookie的名字
                String name = cookie.getName();
                if("JSESSIONID".equals(name)){
                    //持久化该Cookie对象
                    cookie.setMaxAge(180);
                    //将持久化之后的Cookie对象发送给浏览器
                    response.addCookie(cookie);
                }
            }
        }
    }

设置Session对象的最大空闲时间

  • Session对象的默认最大空闲时间是30分钟(在Tomcat的web.xml中有配置),我们也可以设置Session对象的最大空闲时间
  • 我们可以通过调用Session的invalidate()方法使Session对象立即失效
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Session对象
        HttpSession session = request.getSession();
        //设置Session对象的最大空闲时间
        /*
           setMaxInactiveInterval(int age)
           age>0:Session对象在age秒后失效
           age<=0:Session对象永不失效(Tomcat6及之前age=0时是立即失效)
         */
//        session.setMaxInactiveInterval(-1);
        //我们通常使用下面的方式让Session对象立即失效
        session.invalidate();
    }

钝化和活化

  • Session对象与Session对象中保存的数据一起从内存中被序列化到硬盘上的过程称为钝化
    • 关闭服务器时发生钝化现象
  • Session对象与Session对象中保存的数据一起从硬盘上被反序列化到内存中的过程称为活化
    • 再次启动服务器发送活化现象
  • 要保证能正常的钝化和活化Session中保存的数据所对应的类必须实现序列化接口Serializable

Cookie的运行原理


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>Cookie</title>
  </head>
  <body>
    <%--
        Cookie的运行原理:
          1.第一次向服务器发送请求时在服务器端创建一个Cookie对象
          2.将Cookie对象发送给浏览器
          3.以后再发送请求就携带着该Cookie对象
          4.服务器根据不同的Cookie对象来区分不同的用户
    --%>
    <a href="${pageContext.request.contextPath}/CreateCookieServlet">创建Cookie</a><br>
    <a href="${pageContext.request.contextPath}/GetCookiesServlet">获取Cookie</a><br>
  </body>
</html>

CreateCookieServlet

package com.atguigu.cookie.servlet;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import java.io.IOException;

/**
 * 创建Cookie对象的Servlet
 */
@WebServlet("/CreateCookieServlet")
public class CreateCookieServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        //1.创建Cookie对象
        /*
            Cookie的名字不能使用中文,Cookie的值可以使用中文,但是需要指定字符集进行编码,
            获取时还需要指定字符集进行解码,所以不建议使用中文
         */
        Cookie cookie = new Cookie("user", "admin");

        /*
            默认Cookie对象是会话级别的,关闭浏览器Cookie对象将失效,我们可以通过
            setMaxAge()设置Cookie对象的有效时间
            setMaxAge(int age)
             age>0:Cookie对象在age秒后失效
             age=0:Cookie对象立即失效
             age<0:默认,会话级别的Cookie对象
         */
        Cookie cookie1 = new Cookie("user2", "persistCookie");
        cookie1.setMaxAge(-1);

         /*
            Cookie对象的默认的有效路径是项目的根目录,即只要访问项目根目录下的内容,都会携带
            Cookie对象,我们可以通过setPath()方法设置Cookie的有效路径
         */
        Cookie cookie2 = new Cookie("user3", "pathCookie");
        //设置Cookie对象的有效路径
        cookie2.setPath(request.getContextPath()+"/pages");
        //2.将Cookie对象发送给浏览器
        response.addCookie(cookie);
        response.addCookie(cookie1);
        response.addCookie(cookie2);

    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doPost(request,response);
    }
}

GetCookiesServlet

package com.atguigu.cookie.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/GetCookiesServlet")
public class GetCookiesServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取所有的Cookie对象
        Cookie[] cookies = request.getCookies();
        //遍历得到每一个Cookie对象
        if(cookies != null){
            for (Cookie cookie : cookies) {
                //获取Cookie的名字
                String name = cookie.getName();
                //获取Cookie的值
                String value = cookie.getValue();
                System.out.println("Cookie的名字是:"+name);
                System.out.println("Cookie的值是:"+value);
            }
        }
    }

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

Session的运行原理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Session首页</title>
</head>
<body>
    <!--
        Session的运行原理:
            1.第一次向服务器发送请求时在服务器端创建一个Session对象,该对象有一个全球唯一的ID
            2.在创建Session对象的同时会创建一个特殊的Cookie对象,该Cookie对象的名字是一个固
             定值:JSESSIONID,该Cookie对象的值就是Session对象的ID值,并将该Cookie对象发送给i浏览器
            3.以后再发送请求就会携带着这个特殊的Cookie对象
            4.在服务器端获取特殊的Cookie对象的值之后寻找与之对应的Session对象,以此来区分不同的用户
         如何项目中是HTML页面:只有在Servlet中通过request.getSession()才会创建Session对象
         如何项目中是jsp页面:一访问首页就创建了Session对象
    -->
    <h1>我是HTML静态页面!</h1>
</body>
</html>

创建或获取Session对象的Servlet

package com.atguigu.session.servlet;

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;

/**
 * 创建或获取Session对象的Servlet
 */
@WebServlet("/CreateOrGetSessionServlet")
public class CreateOrGetSessionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建或获取Session对象
        HttpSession session = request.getSession();
        //获取Session对象的id
        String id = session.getId();
        System.out.println("Session对象的ID值是:"+id);
        //向session域中添加用户信息
        session.setAttribute("user","admin");
    }

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

设置Session对象的最大空闲时间

package com.atguigu.session.servlet;

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;

/**
 * 设置Session对象的最大空闲时间
 */
@WebServlet("/SetSessionTimeoutServlet")
public class SetSessionTimeoutServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Session对象
        HttpSession session = request.getSession();
        //设置Session对象的最大空闲时间
        /*
           setMaxInactiveInterval(int age)
           age>0:Session对象在age秒后失效
           age<=0:Session对象永不失效(Tomcat6及之前age=0时是立即失效)
         */
//        session.setMaxInactiveInterval(-1);
        //我们通常使用下面的方式让Session对象立即失效
        session.invalidate();
    }

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

钝化和活化

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP首页</title>
</head>
<body>
    <h1>Session对象的ID值是:<%=session.getId()%></h1>
    <%--
        钝化:当关闭服务器时,Session对象及sessino域中存放的数据一起从内存中被序列化到硬盘上的过程
        活化:再次启动服务器,Session对象及sessino域中存放的数据一起从硬盘反序列化到内存中的过程
    --%>
</body>
</html>

PersistJSESSIONIDCookieServlet

package com.atguigu.session.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 通过持久化名字是JSESSIONID的Cookie对象达到再次打开浏览器之后获取服务器中Session对象的目的
 */
@WebServlet("/PersistJSESSIONIDCookieServlet")
public class PersistJSESSIONIDCookieServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Cookie对象
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for (Cookie cookie : cookies) {
                //获取Cookie的名字
                String name = cookie.getName();
                if("JSESSIONID".equals(name)){
                    //持久化该Cookie对象
                    cookie.setMaxAge(180);
                    //将持久化之后的Cookie对象发送给浏览器
                    response.addCookie(cookie);
                }
            }
        }
    }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统据信息的管理升级为软件存储,归纳,集中处理据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值