欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Session會(huì)話追蹤原理深入分析

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

一、會(huì)話技術(shù)

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

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

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

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

二、Session

1.原理

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

2.特點(diǎn)

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

3.獲得一個(gè)會(huì)話對(duì)象

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被請(qǐng)求到了");
		HttpSession session = req.getSession();
        //當(dāng)調(diào)用getSession(true)時(shí),他首先檢查用戶的會(huì)話Cookie是否存在
        //如果不存在:為其創(chuàng)建新的session對(duì)象,將session對(duì)象的ID保存到新建的會(huì)話Cookie中,并            將會(huì)話cookie送回瀏覽器 。
        //如果存在:則按照會(huì)話Cookie 的值找到對(duì)應(yīng)的session對(duì)象返回。
        System.out.println(session.getId());
	}
}

4.Session常見方法

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

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

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

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

相關(guān)文章

  • 詳解Java 對(duì)象序列化和反序列化

    詳解Java 對(duì)象序列化和反序列化

    本篇文章主要介紹了Java 對(duì)象序列化和反序列化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    這篇文章主要介紹了nacos中的配置使用@Value注解獲取不到值的原因分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Java獲取當(dāng)前時(shí)間年月日的方法

    Java獲取當(dāng)前時(shí)間年月日的方法

    這篇文章主要為大家詳細(xì)介紹了Java獲取當(dāng)前時(shí)間年月日的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java工廠模式定義與用法實(shí)例分析

    Java工廠模式定義與用法實(shí)例分析

    這篇文章主要介紹了Java工廠模式定義與用法,結(jié)合具體實(shí)例形式分析了java工廠模式定義、使用相關(guān)操作技巧,并總結(jié)了類圖原理,需要的朋友可以參考下
    2019-07-07
  • SpringBoot自定義MessageConvert詳細(xì)講解

    SpringBoot自定義MessageConvert詳細(xì)講解

    正在學(xué)習(xí)SpringBoot,在自定義MessageConverter時(shí)發(fā)現(xiàn):為同一個(gè)返回值類型配置多個(gè)MessageConverter時(shí),可能會(huì)發(fā)生響應(yīng)數(shù)據(jù)格式錯(cuò)誤,或406異常(客戶端無法接收相應(yīng)數(shù)據(jù))。在此記錄一下解決問題以及追蹤源碼的過程
    2023-01-01
  • Spring Cloud構(gòu)建Eureka應(yīng)用的方法

    Spring Cloud構(gòu)建Eureka應(yīng)用的方法

    這篇文章主要介紹了Spring Cloud構(gòu)建Eureka應(yīng)用的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java使用Deque實(shí)現(xiàn)堆棧的方法

    Java使用Deque實(shí)現(xiàn)堆棧的方法

    這篇文章主要介紹了Java使用Deque實(shí)現(xiàn)堆棧的方法,實(shí)例分析了java簡(jiǎn)單實(shí)現(xiàn)堆棧的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Java TCP協(xié)議通信超詳細(xì)講解

    Java TCP協(xié)議通信超詳細(xì)講解

    TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會(huì)保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission Control Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層
    2022-09-09
  • Java如何實(shí)現(xiàn)內(nèi)存緩存

    Java如何實(shí)現(xiàn)內(nèi)存緩存

    內(nèi)存緩存(Memory?caching)是一種常見的緩存技術(shù),它利用計(jì)算機(jī)的內(nèi)存存儲(chǔ)臨時(shí)數(shù)據(jù),以提高數(shù)據(jù)的讀取和訪問速度,本文就來和大家聊聊Java如何實(shí)現(xiàn)內(nèi)存緩存吧
    2023-08-08
  • 在Spring Boot中集成RabbitMQ詳細(xì)步驟(最新推薦)

    在Spring Boot中集成RabbitMQ詳細(xì)步驟(最新推薦)

    本文將介紹如何在Spring Boot項(xiàng)目中集成RabbitMQ,實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者的基本配置,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12

最新評(píng)論