最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Servlet的Cookie和Session機(jī)制

 更新時(shí)間:2021年05月17日 10:35:52   作者:你這家伙  
雖然session機(jī)制在web應(yīng)用程序中被采用已經(jīng)很長(zhǎng)時(shí)間了,但是仍然有很多人不清楚session機(jī)制的本質(zhì),以至不能正確的應(yīng)用這一技術(shù).本文將詳細(xì)討論session以及cookie的工作機(jī)制,需要的朋友可以參考下

一、Servlet Cookies

Cookies定義:Cookies是存儲(chǔ)在客戶(hù)端計(jì)算機(jī)上的文本文件,并保留了用戶(hù)的各種跟蹤信息。

Cookies作用:會(huì)話(huà)保持,如完成用戶(hù)的登錄與狀態(tài)保持

Cookies的工作原理

客戶(hù)端向服務(wù)區(qū)發(fā)起登錄請(qǐng)求

服務(wù)器腳本(代碼)向?yàn)g覽器發(fā)送一組Cookies,例如:姓名,年齡等

瀏覽器將這些信息存儲(chǔ)在本地計(jì)算機(jī)上,以備將來(lái)使用

當(dāng)下一次瀏覽器向web服務(wù)器發(fā)送任何請(qǐng)求時(shí)。瀏覽器會(huì)把這些Cookies信息發(fā)送到服務(wù)器,服務(wù)器將使用這些信息來(lái)識(shí)別賬戶(hù)

1.1 Cookies構(gòu)成

Cookies通常設(shè)置在HTTP頭信息中,設(shè)置Cookie的http請(qǐng)求,會(huì)向Servlet發(fā)送如下信息

在這里插入圖片描述

  • Set-Cookie頭包含了一個(gè)名稱(chēng)值對(duì),一個(gè)GMT日期,一個(gè)路徑和一個(gè)域,名稱(chēng)和值都會(huì)被URL編碼
  • expires字段是一個(gè)命令,告訴瀏覽器在給定的時(shí)間和日期之后過(guò)去(“忘記”)該Cookie
  • 如果瀏覽器被配置為存儲(chǔ)Cookies,他將會(huì)保留此信息知道到期日期

如果用戶(hù)端的瀏覽器指向任何匹配該Cookie的路徑和域的頁(yè)面,他會(huì)重新發(fā)送Cookie到服務(wù)器,瀏覽器的頭信息可能會(huì)如下:

在這里插入圖片描述

此時(shí)Servlet就能夠通過(guò)請(qǐng)求方法request.getCookies()訪(fǎng)問(wèn)Cookie,該方法將返回一個(gè)Cookie對(duì)象的數(shù)組

1.2 Servlet操作Cookie方法

在這里插入圖片描述

1.3 代碼示例:

具體步驟,創(chuàng)建兩個(gè)后端類(lèi),分別為:

  • 設(shè)置cookie信息
  • 獲取cookie信息

設(shè)置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.創(chuàng)建Cookie對(duì)象
        //首先需要一個(gè)cookie對(duì)象,這里我們需要兩個(gè)cookie對(duì)象,一個(gè)來(lái)存儲(chǔ)用戶(hù)名(username——java),一個(gè)來(lái)存儲(chǔ)密碼(pwd——javas)
        Cookie username = new Cookie("uesrname","java");
        Cookie pwd = new Cookie("pwd","javas");
        //當(dāng)我們創(chuàng)建好兩個(gè)cookie對(duì)象之后,就可以對(duì)這兩個(gè)對(duì)象進(jìn)行一系列操作
        //比如:設(shè)置他的過(guò)期時(shí)間,這里我們將username的過(guò)期時(shí)間設(shè)置為永久
        username.setMaxAge(-1);
        //密碼pwd的過(guò)期時(shí)間設(shè)置為一分鐘,注意他的過(guò)期時(shí)間是以秒為單位
        pwd.setMaxAge(60);
        //2.將 Cookie 對(duì)象關(guān)聯(lián)到response上
        resp.addCookie(username);
        resp.addCookie(pwd);

        //顯示給用戶(hù)部分的信息
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        //然后寫(xiě)入響應(yīng)給客戶(hù)端的內(nèi)容
        PrintWriter writer = resp.getWriter();
        writer.println("<h1>Cookie 設(shè)置成功</h1>");

    }

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

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

結(jié)果驗(yàn)證:

在這里插入圖片描述

獲取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的信息
        //因?yàn)榭蛻?hù)端的cookie可能會(huì)有多個(gè),所以我們使用數(shù)組來(lái)接收,注意:cookie是從request獲取的
        Cookie[] cookies = req.getCookies();
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        //然后讀取cookie的內(nèi)容
        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.因?yàn)樯厦嫖覀冊(cè)O(shè)置cookie信息的時(shí)候,pwd的過(guò)期時(shí)間為一分鐘,當(dāng)我們要去獲取cookie信息的時(shí)候就看時(shí)間不夠,所以建議修改更長(zhǎng)的過(guò)期時(shí)間。

1.4 驗(yàn)證結(jié)果

在這里插入圖片描述

二、Servlet Session

Session定義:session是存儲(chǔ)在服務(wù)器上的文本文件,并保留用戶(hù)的各種跟蹤信息
Session作用:會(huì)話(huà)保持,如完成用戶(hù)的登錄與狀態(tài)保持,因?yàn)樵诜?wù)器端,所以相對(duì)安全一些。

Session在Servlet里的存儲(chǔ)形式

在這里插入圖片描述

2.1 Servlet操作session方法

session是借助cookie實(shí)現(xiàn)的

HttpSession對(duì)象

  • Servlet提供了HttpSession接口,該接口提供了一種跨多個(gè)頁(yè)面請(qǐng)求或訪(fǎng)問(wèn)網(wǎng)站時(shí)識(shí)別用戶(hù)以及存儲(chǔ)有關(guān)用戶(hù)信息的方式
  • Servlet容器使用這個(gè)接口來(lái)創(chuàng)建一個(gè)HTTP客戶(hù)端和HTTP服務(wù)器之間的session會(huì)話(huà),會(huì)話(huà)持續(xù)一個(gè)指定的時(shí)間段??缍鄠€(gè)連接或頁(yè)面請(qǐng)求
  • 可以通過(guò)調(diào)用HttpServletRequest的公共方法 getSession() 來(lái)獲取 HttpSession對(duì)象(如:HttpSession session = request.getSession()),需要在向客戶(hù)端發(fā)送任何文檔內(nèi)容之前調(diào)用 request.getSession()

HttpSession 對(duì)象中可用的幾個(gè)重要的方法:

在這里插入圖片描述

小知識(shí)點(diǎn):session都是通過(guò)request進(jìn)行操作,而cookie是通過(guò)request和response進(jìn)行操作。

2.2 代碼示例

關(guān)于session的讀寫(xiě)操作代碼

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 {
        //關(guān)于 session 的讀寫(xiě)
        //1.先獲取到session到對(duì)象
        HttpSession session = req.getSession();

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


        //返回響應(yīng)信息
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<h1>歡迎訪(fǎng)問(wèn)頁(yè)面</h1>");
        //輸出sessionID
        writer.println(String.format("<h3>SessionID : %s </h3>",sessionID));
        //輸出session的創(chuàng)建時(shí)間,因?yàn)閟ession的創(chuàng)建時(shí)間是一個(gè)時(shí)間戳,所以我們需要將其強(qiáng)轉(zhuǎn)成我們能看得懂的時(shí)間
        writer.println(String.format("<h3>Session創(chuàng)建時(shí)間: %s</h3>",new Date(session.getCreationTime())));
        //輸出session的最后訪(fǎng)問(wèn)時(shí)間
        writer.println(String.format("<h3>Session的最后訪(fǎng)問(wèn)時(shí)間: %S</h3>",new Date(session.getLastAccessedTime())));
        
    }

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

2.3 驗(yàn)證結(jié)果

在這里插入圖片描述

到此這篇關(guān)于淺談Servlet的Cookie和Session機(jī)制的文章就介紹到這了,更多相關(guān)Servlet的Cookie和Session內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Spring Boot實(shí)戰(zhàn)之Rest接口開(kāi)發(fā)及數(shù)據(jù)庫(kù)基本操作

    詳解Spring Boot實(shí)戰(zhàn)之Rest接口開(kāi)發(fā)及數(shù)據(jù)庫(kù)基本操作

    本篇文章主要介紹了Spring Boot實(shí)戰(zhàn)之Rest接口開(kāi)發(fā)及數(shù)據(jù)庫(kù)基本操作,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • Java的Lombok之@Builder使用總結(jié)

    Java的Lombok之@Builder使用總結(jié)

    這篇文章主要介紹了Java的Lombok之@Builder使用總結(jié),當(dāng)不使用@Builder注解到類(lèi)上,創(chuàng)建T1的有參構(gòu)造函數(shù),入?yún)⒉粌H包括T1中所有的參數(shù),還包括T中所有的參數(shù),T2的屬性由T1在有參構(gòu)造函數(shù)中通過(guò)調(diào)用父類(lèi)構(gòu)造器的方式賦初值,需要的朋友可以參考下
    2023-12-12
  • java自定義線(xiàn)程池的原理簡(jiǎn)介

    java自定義線(xiàn)程池的原理簡(jiǎn)介

    這篇文章主要介紹了java自定義線(xiàn)程池的原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 深入淺出RocketMQ的事務(wù)消息

    深入淺出RocketMQ的事務(wù)消息

    RocketMQ事務(wù)消息(Transactional?Message)是指應(yīng)用本地事務(wù)和發(fā)送消息操作可以被定義到全局事務(wù)中,要么同時(shí)成功,要么同時(shí)失敗。本文主要介紹了RocketMQ事務(wù)消息的相關(guān)知識(shí),需要的可以參考一下
    2023-04-04
  • JVM字符串常量池StringTable的具體使用

    JVM字符串常量池StringTable的具體使用

    字符串常量池是JVM中的一個(gè)重要結(jié)構(gòu),用于存儲(chǔ)JVM運(yùn)行時(shí)產(chǎn)生的字符串,本文主要介紹了JVM字符串常量池StringTable的具體使用,感興趣的可以了解一下
    2024-04-04
  • java實(shí)現(xiàn)八皇后問(wèn)題示例分享

    java實(shí)現(xiàn)八皇后問(wèn)題示例分享

    這篇文章主要介紹了java實(shí)現(xiàn)八皇后問(wèn)題示例,八皇后問(wèn)題,是一個(gè)古老而著名的問(wèn)題,是回溯算法的典型案例。該問(wèn)題是國(guó)際西洋棋棋手馬克斯·貝瑟爾于1848年提出
    2014-03-03
  • 在SpringBoot中集成H2數(shù)據(jù)庫(kù)的完整指南

    在SpringBoot中集成H2數(shù)據(jù)庫(kù)的完整指南

    Spring Boot是一個(gè)簡(jiǎn)化企業(yè)級(jí)Java應(yīng)用程序開(kāi)發(fā)的強(qiáng)大框架,H2數(shù)據(jù)庫(kù)是一個(gè)輕量級(jí)的、開(kāi)源的SQL數(shù)據(jù)庫(kù),非常適合用于開(kāi)發(fā)和測(cè)試,本文將指導(dǎo)您如何在Spring Boot應(yīng)用程序中集成H2數(shù)據(jù)庫(kù),并探索一些高級(jí)配置選項(xiàng),需要的朋友可以參考下
    2024-10-10
  • SpringAOP中的Advisor詳解

    SpringAOP中的Advisor詳解

    這篇文章主要介紹了SpringAOP中的Advisor詳解,平時(shí)我們項(xiàng)目中涉及到?AOP,基本上就是聲明式配置一下就行了,無(wú)論是基于?XML?的配置還是基于?Java?代碼的配置,都是簡(jiǎn)單配置即可使用,今天就來(lái)看一下聲明式配置的使用,需要的朋友可以參考下
    2023-08-08
  • SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼生成的方法

    SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼生成的方法

    驗(yàn)證碼可以有效防止其他人對(duì)某一個(gè)特定的注冊(cè)用戶(hù)用特定的程序暴力 破解方式進(jìn)行不斷的登錄嘗試,斷的登錄嘗試
    我們其實(shí)很經(jīng)??吹?登錄一些網(wǎng)站其實(shí)是需要驗(yàn)證碼的,本文給大家介紹了SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼生成的方法,需要的朋友可以參考下
    2025-03-03
  • SpringBoot Mybatis 配置文件形式詳解

    SpringBoot Mybatis 配置文件形式詳解

    這篇文章主要介紹了SpringBoot Mybatis 配置文件形式詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03

最新評(píng)論

宜良县| 新余市| 林甸县| 嘉鱼县| 阿克苏市| 阿克陶县| 宝鸡市| 江源县| 康平县| 宁强县| 湖北省| 中牟县| 象山县| 个旧市| 濉溪县| 昆明市| 清远市| 准格尔旗| 敦化市| 合川市| 沂南县| 云阳县| 烟台市| 西畴县| 辽宁省| 普安县| 宁武县| 辽宁省| 仙桃市| 尼木县| 雷州市| 平遥县| 陵川县| 阿鲁科尔沁旗| 柘城县| 卫辉市| 手机| 贵阳市| 定兴县| 凤山县| 宁晋县|