浅谈Servlet的Cookie和Session机制

一、Servlet Cookies

Cookies定义:Cookies是存储在客户端计算机上的文本文件,并保留了用户的各种跟踪信息。

Cookies作用:会话保持,如完成用户的登录与状态保持

Cookies的工作原理

客户端向服务区发起登录请求

服务器脚本(代码)向浏览器发送一组Cookies,例如:姓名,年龄等

浏览器将这些信息存储在本地计算机上,以备将来使用

当下一次浏览器向web服务器发送任何请求时。浏览器会把这些Cookies信息发送到服务器,服务器将使用这些信息来识别账户

1.1 Cookies构成

Cookies通常设置在HTTP头信息中,设置Cookie的http请求,会向Servlet发送如下信息

  • Set-Cookie头包含了一个名称值对,一个GMT日期,一个路径和一个域,名称和值都会被URL编码
  • expires字段是一个命令,告诉浏览器在给定的时间和日期之后过去(“忘记”)该Cookie
  • 如果浏览器被配置为存储Cookies,他将会保留此信息知道到期日期

如果用户端的浏览器指向任何匹配该Cookie的路径和域的页面,他会重新发送Cookie到服务器,浏览器的头信息可能会如下:

此时Servlet就能够通过请求方法request.getCookies()访问Cookie,该方法将返回一个Cookie对象的数组

1.2 Servlet操作Cookie方法

1.3 代码示例:

具体步骤,创建两个后端类,分别为:

  • 设置cookie信息
  • 获取cookie信息

设置cookie信息代码

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

public class SetCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.创建Cookie对象
        //首先需要一个cookie对象,这里我们需要两个cookie对象,一个来存储用户名(username——java),一个来存储密码(pwd——javas)
        Cookie username = new Cookie("uesrname","java");
        Cookie pwd = new Cookie("pwd","javas");
        //当我们创建好两个cookie对象之后,就可以对这两个对象进行一系列操作
        //比如:设置他的过期时间,这里我们将username的过期时间设置为永久
        username.setMaxAge(-1);
        //密码pwd的过期时间设置为一分钟,注意他的过期时间是以秒为单位
        pwd.setMaxAge(60);
        //2.将 Cookie 对象关联到response上
        resp.addCookie(username);
        resp.addCookie(pwd);

        //显示给用户部分的信息
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        //然后写入响应给客户端的内容
        PrintWriter writer = resp.getWriter();
        writer.println("<h1>Cookie 设置成功</h1>");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

注意:一定不要忘记配置web.xml文件

结果验证:

获取cookie信息代码

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

public class GetCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //读取Cookie的信息
        //因为客户端的cookie可能会有多个,所以我们使用数组来接收,注意:cookie是从request获取的
        Cookie[] cookies = req.getCookies();
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        //然后读取cookie的内容
        for (Cookie item: cookies
             ) {
            writer.println(String.format("<h1>Cookie key: %s,Cookie value: %s</h1>",item.getName(),item.getValue()));
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

注意
1.不要忘记配置web.xml文件
2.因为上面我们设置cookie信息的时候,pwd的过期时间为一分钟,当我们要去获取cookie信息的时候就看时间不够,所以建议修改更长的过期时间。

1.4 验证结果

二、Servlet Session

Session定义:session是存储在服务器上的文本文件,并保留用户的各种跟踪信息
Session作用:会话保持,如完成用户的登录与状态保持,因为在服务器端,所以相对安全一些。

Session在Servlet里的存储形式

2.1 Servlet操作session方法

session是借助cookie实现的

HttpSession对象

  • Servlet提供了HttpSession接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式
  • Servlet容器使用这个接口来创建一个HTTP客户端和HTTP服务器之间的session会话,会话持续一个指定的时间段。跨多个连接或页面请求
  • 可以通过调用HttpServletRequest的公共方法 getSession() 来获取 HttpSession对象(如:HttpSession session = request.getSession()),需要在向客户端发送任何文档内容之前调用 request.getSession()

HttpSession 对象中可用的几个重要的方法:

小知识点:session都是通过request进行操作,而cookie是通过request和response进行操作。

2.2 代码示例

关于session的读写操作代码

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

public class SessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //关于 session 的读写
        //1.先获取到session到对象
        HttpSession session = req.getSession();

        //2.得到session的属性
        //2.1获取到session的ID
        String sessionID = session.getId();

        //返回响应信息
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<h1>欢迎访问页面</h1>");
        //输出sessionID
        writer.println(String.format("<h3>SessionID : %s </h3>",sessionID));
        //输出session的创建时间,因为session的创建时间是一个时间戳,所以我们需要将其强转成我们能看得懂的时间
        writer.println(String.format("<h3>Session创建时间: %s</h3>",new Date(session.getCreationTime())));
        //输出session的最后访问时间
        writer.println(String.format("<h3>Session的最后访问时间: %S</h3>",new Date(session.getLastAccessedTime())));

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

2.3 验证结果

到此这篇关于浅谈Servlet的Cookie和Session机制的文章就介绍到这了,更多相关Servlet的Cookie和Session内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • servlet Cookie使用方法详解(六)

    本文实例为大家分享了servlet Cookie的使用方法,供大家参考,具体内容如下 1.cookie介绍 Cookie,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密).(可以叫做浏览器缓存) 2.cookie案例 servlet 源码 package com.learn; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.

  • servlet中session简介和使用例子

    HttpServletRequest有两个重载的getSession()方法,一个接受一个boolean的类型的值,另一个不带任何参数,getSession()方法和getSession(true)方法功能一样,就是如果对应的客户端已经产生过一个session,那么就会返回这个旧的session,否则,这个方法将会产生一个session ID并且和对应的客户端绑定在一起,而如果getSession(false)表示如果对应的客户端已经有对应的session,那么返回这个旧的session,否则不

  • servlet之session工作原理简介_动力节点Java学院整理

    要了解Session的底层工作原理.我们还是先看在一个会话过程中,同一个浏览器在访问多个web资源的情况好了,大致分为以下几个步骤: 1,浏览器访问某个Servlet,这时如果服务器要从请求对象中获取Session对象(第一次获取也是创建),那么服务器会为这个Session对象创建一个id:JSESSIONID 2,同时在对浏览器的响应过程中,这个Session会将JSESSIONID这个id以Cookie形式回送给客户端浏览器,记住,这时候Cookie服务器没有设置有效时间,因此是存在浏览器的

  • java中Servlet Cookie取不到值原因解决办法

    java中Servlet Cookie取不到值原因解决办法 现象: 在测试带Cookie的HTTP请求时发现,服务端用request.getHeader("cookie")可以去到值; 但是用request.getCookies()却不行 Cookie mycookies[] = request.getCookies(); 中永远获取不到uid的值:(80端口号除外) 原因: 查了浏览器的具体cookie值,发现 http://localhost:8080/ 访问的时候,cookie值

  • 全面了解servlet中cookie的使用方法

    ---恢复内容开始--- Cookie是存储在客户端计算机上的文本文件,并保留了它们的各种信息跟踪的目的. Java Servlet透明支持HTTP Cookie. 涉及标识返回用户有三个步骤: • 服务器脚本发送到浏览器的一组cookie.对于如: 姓名,年龄,或识别号码等. • 浏览器将这些信息存储在本地计算机上,以备将来使用. • 下一次浏览器发送任何请求,Web服务器,然后这些cookie发送信息到服务器,服务器将使用这些信息来识别用户. 以下是有用的方法列表时,可以使用servlet操

  • servlet之cookie简介_动力节点Java学院整理

    首先来了解什么是"会话".会话是web技术中的一个术语,可以简单的理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,这个过程称为一个会话. 如果在打开一个浏览器访问一个页面后,再打开一个浏览器访问同一个页面,那这就是有两个会话:而打开一个浏览器访问一个页面后,通过这个页面上的某个超链接是从新的浏览器打开的,那依然只算一个会话. 每个用户在使用浏览器与服务器进行会话的过程中,各自不可避免地会产生一些数据,而程序要想办法为每个用户保存这些数据.比如,用户

  • Java Servlet及Cookie的使用

    本文介绍了Java Servlet编程所需的软件及环境配置.只要你有一台安装Windows 95/98了的PC机,便可以按照本文的步骤开发Servlet程序了.本文同时给出了通过Java Servlet向用户的硬盘写入和读取Cookie的方法及例程.通过它可以实现网上常见的个性化网页.网上购物篮.密码验证等. Java Servlet是运行于Web服务器上的Java代码,它可以接受用户请求,进行相应的处理,并向用户提供反馈.其作用类似于CGI程序,可以实现网页中很多交互式效果,但比CGI程序效率

  • servlet之session简介_动力节点Java学院整理

    Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,注意是默认情况下,一个浏览器独占一个session,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自数据存放在各自的session中,当用户再去访问服务器的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务. Session和Cookie的主要区别: Cookie技术是客户端技术,是由服务器将用户的数据写回给用户浏览

  • 浅谈Servlet的Cookie和Session机制

    一.Servlet Cookies Cookies定义:Cookies是存储在客户端计算机上的文本文件,并保留了用户的各种跟踪信息. Cookies作用:会话保持,如完成用户的登录与状态保持 Cookies的工作原理: 客户端向服务区发起登录请求 服务器脚本(代码)向浏览器发送一组Cookies,例如:姓名,年龄等 浏览器将这些信息存储在本地计算机上,以备将来使用 当下一次浏览器向web服务器发送任何请求时.浏览器会把这些Cookies信息发送到服务器,服务器将使用这些信息来识别账户 1.1 C

  • 浅谈servlet中的request与response

    在b/s架构中,有request浏览器的请求,也有response的服务器反馈.底层是tcp/ip协议,应用层是http协议.在tomcat服务器中,版本6使用的http1.1版本协议.服务器发出request请求,在请求中有可能加载get和post请求(doget请求,是放在URL中可以使用getparmeter进行解析,因为tomcat把每一个网页请求看做一个对象,所以是面向对象(HttpServletRequest)进行封装,并有doget和dopost进行 对应的解析.主要的API如下:

  • 浅谈Scrapy框架普通反爬虫机制的应对策略

    简单低级的爬虫速度快,伪装度低,如果没有反爬机制,它们可以很快的抓取大量数据,甚至因为请求过多,造成服务器不能正常工作.而伪装度高的爬虫爬取速度慢,对服务器造成的负担也相对较小. 爬虫与反爬虫,这相爱相杀的一对,简直可以写出一部壮观的斗争史.而在大数据时代,数据就是金钱,很多企业都为自己的网站运用了反爬虫机制,防止网页上的数据被爬虫爬走.然而,如果反爬机制过于严格,可能会误伤到真正的用户请求;如果既要和爬虫死磕,又要保证很低的误伤率,那么又会加大研发的成本. 简单低级的爬虫速度快,伪装度低,如果

  • 浅谈Tomcat如何打破双亲委托机制

    目录 JVM的类加载器 Tomcat的类加载器 findClass loadClass 我们经常会遇到ClassNotFound异常,表明JVM在尝试加载某类时失败了. 要解决这个异常,你得知道 什么是类加载 JVM如何加载类 为什么会出现ClassNotFound 想想Tomcat又是如何加载和管理Web应用下的Servlet呢? Tomcat正是通过Context组件来加载管理Web应用的,所以今天我会详细分析Tomcat的类加载机制.但在这之前,我们有必要预习一下JVM的类加载机制,我会先

  • 浅谈Servlet转发到JSP页面的路径问题(必看)

    一.现象与概念 1. 问题 在Servlet转发到JSP页面时,此时浏览器地址栏上显示的是Servlet的路径,而若JSP页面的超链接还是相对于该JSP页面的地址且该Servlet和该JSP页面不在同一个文件夹下时,则会出现路径混乱问题. 2. 绝对路径概念 相对于contextPath(当前Web应用的上下文)的路径. 解决方案:超链接用绝对路径而不是相对路径.若/代表的是站点的根目录,在其前面加上contextPath. <a href="<%= request.getConte

  • 浅谈Servlet开发技术基础

    一.Servlet概述 1.sun公司提供的动态web资源开发技术.本质是上一段java小程序,要求这个小程序必须实现Servlet接口,以便服务器能够调用. 2.开发Servlet的两个步骤 *实验:Servlet的快速入门 (1)步骤一:写一个java程序实现Servlet接口(此处直接继承了默认实现类GenericServlet) package cn.itheima; import java.io.*; import javax.servlet.*; public class First

  • 浅谈Qt QGraphics体系及刷新机制介绍

    概述 Qt的三大体系:QWidget.QGraphics.Quick,其中QGraphics图形框架算是这三个中比较高级的一种用法了,并且使用起来相比另外两个体系会更加的复杂一些,不过它能实现的功能却非常强大,主要体现在对图元的管理,它独特的刷新机制可以在众多的图元中都能够很好的管理,保证整个交互的流畅度. 而这里要描述的就是QGraphics体系的刷新机制以及该体系中相关元素的使用方式及特点. QGraphics体系的三大元素 QGraphics体系中最重要的三大元素:QGraphicsVie

  • 浅谈SpringBoot2.4 配置文件加载机制大变化

    前言 Spring Boot 2.4.0.M2刚刚发布,它对 application.properties 和 application.yml 文件的加载方式进行重构.如果应用程序仅使用单个 application.properties 或 application.yml 作为配置文件,那么可能感受不到任何区别.但是如果您的应用程序使用更复杂的配置(例如,Spring Cloud 配置中心等),则需要来了解更改的内容以及原因. 为什么要进行这些更改 随着最新版本 Spring Boot 发布,S

  • 浅谈Redis中的自动过期机制

    目录 Redis中的自动过期机制 一.使用Redis Key自动过期机制 二.SpringBoot整合key失效监听 Redis中的自动过期机制 实现需求:处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 1.使用Redis Key自动过期出发事件通知2.使用定时任务30分钟后检查3.按照每分钟轮训检查 CREATE TABLE `order_number` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_name` varchar(25

  • 浅谈Spring学习之request,session与globalSession作用域

    与web容器有关的作用域,首先要在Web容器里进行一些配置. <web-app> ... <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> ... </web-app> Request作用域 考虑下面bean定义: <bean id=&qu

随机推荐