走進會話

来源:http://www.cnblogs.com/aristole/archive/2017/12/12/8029694.html
-Advertisement-
Play Games

瞭解會話的產生過程、會話的特性、簡單的Cookie、在URL中內嵌會話ID以及這樣做帶來什麼後果 ...


會話用來做什麼:

  它是用來維持請求和請求之間的狀態。http請求預設是完全無狀態的,也就是說,當用戶瀏覽器把一個完整的請求發送到伺服器,等到伺服器接收完全部的請求,在此之後,用戶的瀏覽器與伺服器之間再也沒人什麼聯繫。當用戶瀏覽器發送下一個請求,那麼這個請求無法與之前的請求關聯起來。這樣會導致什麼後果?以線上商城為例子,用戶需要在不同的商品頁面中瀏覽,當把其中一個商品添加到購物車後,然後再去找其他商品並添加到購物車。若採用採用無狀態的連接,也就是前後兩次請求無法關聯起來,購物車裡並不包含前一次添加進來的商品。所以你只能在當前請求還沒有結束之前把賬單結了,也就是一次只能付款一個商品,無法做到一次性付款所有商品。

 

會話的工作原理:

  會話是由伺服器或web應用程式管理的某些文件、記憶體片段、對象或容器,它包含了分配給它的各種不同的數據。可以把它理解為一個可以存儲之前請求的空間,伺服器會把某個用戶的會話保存在本機中,當下一次用戶再發送請求到伺服器,會把當前的請求與會話中存儲的請求關聯起來。

  若採用了會話技術,那麼在用戶瀏覽器發送第一個請求到伺服器,伺服器會為該用戶開闢一段空間用來保存會話內容,並生成一個唯一的會話ID用來標識該用戶。當伺服器返迴響應時,會在響應段中添加會話ID。接下來,從該用戶瀏覽器發出的每個請求都將包含這個會話ID,當Web應用程式接收到含有會話ID的請求時,它可以通過該ID將現有的會話與當前的請求關聯起來。

 

走進會話Cookie:

  它是一種通信機制,可以通過Set-Cookie響應頭在伺服器和瀏覽器之間傳遞任意的數據,並存儲在用戶電腦中,然後再通過請求頭Cookie從瀏覽器返回到伺服器中。

  在JavaEE中會話Cookie的名字預設是JSESSIONID  

  Cookie有哪些特性:

    1.Domain:告訴瀏覽器將cookie發送到哪個功能變數名稱中

    2.Path:將cookie發送到某個功能變數名稱下的某個URL

    3.Expires:定義了Cookie的絕對過期日期

    4.Max-Age:定義了Cookie的存活時間,以秒為單位

    ps:若Cookie中不包含Expires和Max-Age這兩個特性,那麼該Cookie將在瀏覽器關閉時被刪除

    5.Secure:瀏覽器只會通過HTTPS發送Cookie。

    6.HttpOnly:只能通過直接的瀏覽器請求發送cookie,其他技術如JavaScript、Flash將無法發送Cookie

 

如何在請求URL中包含會話ID:

  會話ID需要作為第一個響應返回給用戶瀏覽器,如何生成會話ID?需要把會話ID添加到每個應用程式返回的URL中,包括頁面的鏈接、表單操作以及302重定向。

  可以通過HttpServletResponse介面中的兩個方法encodeURL()和encodeRedirectURL()將會話ID內嵌到URL中。任何在鏈接、表單操作或者其他標簽中的URL都將被傳入到encodeURL()方法中,然後返回一個正確的、經過編碼處理的URL。任何可以傳入sendRedirect()中的URL都可以傳入encodeRedirectURL()方法中,返回一個正確的、經過編譯處理的URL。

 

URL中內嵌會話ID會帶來什麼後果:

  如果將該URL複製到公共場所,如果惡意用戶發現了該鏈接,可以使用劫持用戶的會話。他將可以修改賬戶地址、獲取密碼重置鏈接並終修改密碼。

  攻擊者通過URL或者檢查瀏覽器的Cookie獲得會話ID,然後將含有會話ID的URL發送給目標用戶,當用戶點擊鏈接進入網站時,它的會話ID就換成了URL中含有的固定ID-----攻擊者已經持有該ID。如果用戶接著在該會話期間登錄網站,那麼攻擊者也可以登錄成功,因為這個會話ID是他分享的,因此他也可以訪問用戶的賬號。這個可以通過禁止在URL中內嵌會話ID或者設置登錄後會話遷移(當用戶登錄時,修改會話ID或者將會話信息複製到新的會話中,並使之前的會話無效)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一階段:一年之內的 JAVA 從業人員 這個階段是你成長極快的階段,而且你可能會經常加班。但是加班不代表你就可以鬆懈了,永遠記得我說的那句話,從你入行那一刻起,你就要不停的學習。在這一年裡,你至少需要看完《 Java 編程思想》這本書。這本書的內容是幫助你對於 Java 有一個更加深入的瞭解,是 ...
  • 1、Java開發環境概述 JDK:Java開發工具包(Java Development Kit),包括java編譯器、java運行時環境和常用的類庫; JRE:Java運行時環境(Java Runtime Environment)。 2、跨平臺特性 ①平臺指的是操作系統(Windows,Linux, ...
  • 如果上一篇我轉發的關於ubuntu的博文,你看完覺得還沒準備好,那麼,本篇從最基礎的開始,安裝虛擬機到正常使用ubuntu 虛擬機 1.什麼是虛擬機 虛擬機(Virtual Machine)指通過軟體模擬的具有完整硬體系統功能的、運行在一個完全隔離環境中的完整電腦系統。 通俗的說,我們平常看得見摸 ...
  • 題目描述 如題,已知一個數列,你需要進行下麵兩種操作: 1.將某一個數加上x 2.求出某區間每一個數的和 輸入輸出格式 輸入格式: 第一行包含兩個整數N、M,分別表示該數列數字的個數和操作的總個數。 第二行包含N個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。 接下來M行每行包含3個整數, ...
  • 最近從百度雲盤上下載了一批視頻,然而這些視頻的文件名都帶有廣告。有潔癖的我看著感覺難受,於是想修改過來。但是一個個的修改文件名又嫌麻煩,聯想到業餘時看過的python,於是用python寫了幾行代碼輕鬆地批量修改了文件名稱。 代碼如下: python學習起來著實有趣,聽說python明年在某個省份要 ...
  • 類型檢查 創建類的實例時,該實例的類型為類本身: 要測試實例是否屬於某個類,可以使用type()內置函數: 當然,python中不建議如此檢查,更好的辦法是使用內置類型檢查函數isinstance(obj, cls): 同樣的,內置函數issubclass(cls1, cls2)可以用做子類的檢查: ...
  • 背景: 以前學的Java進行開發,多用到Mybatis,Hiberante等ORM框架,最近需要上手一個C#的項目,由於不是特別難,也不想再去學習C#的ORM框架,所以就想著用反射簡單的實現一下ORM框架的內容,簡單的增刪改查,沒有用到多表之間的聯繫。 反射: Java和C#中的反射大體相同,主要是 ...
  • 由於自己的公司的項目需要調用視頻地址 1:當為鏈接時:直接在播放器用資料庫查找的地址 2:當為外部鏈接時:直接用window.location.href('資料庫查找的地址') 3:當為H5鏈接時:使用<ifram src="資料庫查找的地址">播放 4:當為其餘網站鏈接時,要去第三方網站讀取jso ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...