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

Java Session會話追蹤原理深入分析

 更新時間:2022年11月05日 10:34:43   作者:OlaiolaiO  
web開發(fā)階段我們主要是瀏覽器和服務(wù)器之間來進行交互。瀏覽器和服務(wù)器之間的交互就像人和人之間進行交流一樣,但是對于機器來說,在一次請求之間只是會攜帶著本次請求的數(shù)據(jù)的,但是可能多次請求之間是會有聯(lián)系的,所以提供了會話機制

一、會話技術(shù)

客戶端和服務(wù)器通信的過程中,自然而然的會產(chǎn)生一些數(shù)據(jù)交互。比如,A用戶登錄了郵箱,那么web服務(wù)器該怎么知道C一段時間后的登錄狀態(tài)呢?雖然HttpServletRequest對象和ServletContext對象都可以保存數(shù)據(jù),但是不適用于這種情況。

  • 客戶端的每次請求,服務(wù)器都會產(chǎn)生一個HttpServletRequest對象,該對象只保存請求所傳遞的數(shù)據(jù)。
  • 用一個WEB應(yīng)用共享一個ServletContext對象,所以當多個用戶登錄時就有可能會造成數(shù)據(jù)混淆。

當瀏覽器向ServletB發(fā)出請求時,它的登陸操作已經(jīng)完成了,但是卻沒有留下任何依據(jù)能夠證明它已經(jīng)成功登陸。以至于ServletB對他的登陸狀態(tài)無法判別,這種情況叫用戶狀態(tài)的丟失。造成這種結(jié)果的原因是http協(xié)議的無狀態(tài);

為了解決這個問題,Servlet提供了會話跟蹤技術(shù)來追蹤用戶狀態(tài),簡單的說就是指將用戶操作過的重要業(yè)務(wù)步驟記錄下來,以便在后續(xù)的處理中使用。

二、Session

1.原理

客戶端瀏覽器第一次訪問,服務(wù)器端創(chuàng)建一個會話對象。并且具有id的唯一值。依賴cookie將sessionId的值發(fā)送給客戶端。第二次請求的時候,客戶端瀏覽器攜帶sessionId到服務(wù)器。服務(wù)器端獲得sessionId,從而實現(xiàn)了會話跟蹤。

2.特點

創(chuàng)建在服務(wù)器端,并且保存在服務(wù)器端 。

3.獲得一個會話對象

import java.io.IOException;
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;
@WebServlet("/testsession.do")
public class testSessionServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("testSessionServlet被請求到了");
		HttpSession session = req.getSession();
        //當調(diào)用getSession(true)時,他首先檢查用戶的會話Cookie是否存在
        //如果不存在:為其創(chuàng)建新的session對象,將session對象的ID保存到新建的會話Cookie中,并            將會話cookie送回瀏覽器 。
        //如果存在:則按照會話Cookie 的值找到對應(yīng)的session對象返回。
        System.out.println(session.getId());
	}
}

4.Session常見方法

// 獲取Session
HttpSession session = request.getSession();
// 將指定Key-Value鍵值對,存入當前Session會話中。
void setAttribute(String name, Object value);
// 按照指定的Key從當前Session會話中獲取Value,返回值為Object類型的對象,如果不存在,則返回null。
Object getAttribute(String name);
// 按照指定的Key從當前Session會話中刪除Key-Value鍵值對。
void removeAttribute(String name);
// 獲取當前Session會話的創(chuàng)建時間。
long time = session.getCreationTime();
// 獲取當前Session會話最后一次請求的訪問時間。
long lastAccessedTime = session.getLastAccessedTime();
// 獲取當前Session會話的SESSION ID
String id = session.getId();
//設(shè)置最大有效時間,以秒為單位
session.setMaxInactiveInterval(100);
// session失效
session.invalidate();

三、Cookie和Session的區(qū)別

  1. 保存的位置不同:cookie保存在瀏覽器端,session保存在服務(wù)端。
  2. 使用方式不同:cookie如果在瀏覽器端對cookie進行設(shè)置對應(yīng)的時間,則cookie保存在本地硬盤中,此時如果沒有過期,則就可以使用,如果過期則就刪除。如果沒有對cookie設(shè)置時間,則默認關(guān)閉瀏覽器,則cookie就會刪除。session:我們在請求中,如果發(fā)送的請求中存在sessionId,則就會找到對應(yīng)的session對象,如果不存在sessionId,則在服務(wù)器端就會創(chuàng)建一個session對象,并且將sessionId返回給瀏覽器,可以將其放到cookie中,進行傳輸,如果瀏覽器不支持cookie,則應(yīng)該將其通過encodeURL(sessionID)進行調(diào)用,然后放到url中。
  3. 存儲內(nèi)容不同:cookie只能存儲字符串,而session存儲結(jié)構(gòu)類似于hashtable的結(jié)構(gòu),可以存放任何類型。
  4. 存儲大小:cookie最多可以存放4k大小的內(nèi)容,session則沒有限制。
  5. session的安全性要高于cooKie
  6. cookie的session的應(yīng)用場景:cookie可以用來保存用戶的登陸信息,如果刪除cookie則下一次用戶仍需要重新登錄;session就類似于我們拿到鑰匙去開鎖,拿到的就是我們個人的信息,一般我們可以在session中存放個人的信息或者購物車的信息。
  7. session和cookie的弊端:cookie的大小受限制,cookie不安全,如果用戶禁用cookie則無法使用cookie。如果過多的依賴session,當很多用戶同時登陸的時候,此時服務(wù)器壓力過大。sessionId存放在cookie中,此時如果對于一些瀏覽器不支持cookie,此時還需要改寫代碼,將sessionID放到url中,也是不安全。

到此這篇關(guān)于Java Session會話追蹤原理深入分析的文章就介紹到這了,更多相關(guān)Java Session會話追蹤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java同步框架AbstractQueuedSynchronizer詳解

    Java同步框架AbstractQueuedSynchronizer詳解

    本篇文章主要介紹了Java同步框架AbstractQueuedSynchronizer詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • SpringBoot集成Jasypt敏感信息加密的操作方法

    SpringBoot集成Jasypt敏感信息加密的操作方法

    這篇文章主要介紹了SpringBoot集成Jasypt加密敏感信息,包括敏感信息加密的作用,項目集成Jasypt方式詳解,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • JAVA springboot如何開啟倆端口

    JAVA springboot如何開啟倆端口

    這篇文章主要介紹了JAVA springboot如何開啟倆端口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • mybatisplus添加真正的批量新增、批量更新的實現(xiàn)

    mybatisplus添加真正的批量新增、批量更新的實現(xiàn)

    這篇文章主要介紹了mybatisplus添加真正的批量新增、批量更新的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java實現(xiàn)操作excel表格

    Java實現(xiàn)操作excel表格

    在日常工作中,對Excel工作表格的操作處理可是多的數(shù)不清楚,下面是java語言對其的操作,有需要的小伙伴可以參考下
    2015-10-10
  • Spring Boot Jar 包部署腳本的實例講解

    Spring Boot Jar 包部署腳本的實例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于Spring Boot Jar 包部署腳本的實例講解內(nèi)容,對此有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • 關(guān)于Spring中@Lazy注解的使用

    關(guān)于Spring中@Lazy注解的使用

    這篇文章主要介紹了關(guān)于Spring中@Lazy注解的使用,@Lazy注解用于標識bean是否需要延遲加載,沒加注解之前主要容器啟動就會實例化bean,本文提供了部分實現(xiàn)代碼,需要的朋友可以參考下
    2023-08-08
  • Springboot jar包遠程調(diào)試詳解

    Springboot jar包遠程調(diào)試詳解

    這篇文章主要為大家詳細介紹了Springboot jar包遠程調(diào)試,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Java中的String不可變性實現(xiàn)

    Java中的String不可變性實現(xiàn)

    在Java編程中,String類的不可變性是一個被廣泛討論和利用的特性,本文主要介紹了Java中的String不可變性實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java中的接口和抽象類用法實例詳解

    Java中的接口和抽象類用法實例詳解

    這篇文章主要介紹了Java中的接口和抽象類用法,結(jié)合實例形式較為詳細的分析了Java中關(guān)于接口和抽象類的概念、定義、用法與相關(guān)注意事項,需要的朋友可以參考下
    2015-12-12

最新評論

渝中区| 民和| 安泽县| 肇庆市| 大新县| 鱼台县| 义乌市| 临泽县| 柳江县| 大港区| 连云港市| 凤城市| 永善县| 长岛县| 华宁县| 新干县| 彭泽县| 油尖旺区| 孟津县| 兴仁县| 沈阳市| 晋城| 锦州市| 灯塔市| 民勤县| 井陉县| 潞西市| 华阴市| 沁阳市| 鸡东县| 汾西县| 营山县| 同江市| 沙湾县| 健康| 扶风县| 蒙阴县| 昌图县| 普宁市| 静安区| 福建省|