1. 程式人生 > >JavaWeb學習 (十一)————Session

JavaWeb學習 (十一)————Session

一、Session簡單介紹

  在WEB開發中,伺服器可以為每個使用者瀏覽器建立一個會話物件(session物件),注意:一個瀏覽器獨佔一個session物件(預設情況下)。因此,在需要儲存使用者資料時,伺服器程式可以把使用者資料寫到使用者瀏覽器獨佔的session中,當用戶使用瀏覽器訪問其它程式時,其它程式可以從使用者的session中取出該使用者的資料,為使用者服務。

二、Session和Cookie的主要區別

  • Cookie是把使用者的資料寫給使用者的瀏覽器。
  • Session技術把使用者的資料寫到使用者獨佔的session中。
  • Session物件由伺服器建立,開發人員可以呼叫request物件的getSession方法得到session物件。

三、session實現原理

3.1、伺服器是如何實現一個session為一個使用者瀏覽器服務的?

   伺服器建立session出來後,會把session的id號,以cookie的形式回寫給客戶機,這樣,只要客戶機的瀏覽器不關,再去訪問伺服器時,都會帶著session的id號去,伺服器發現客戶機瀏覽器帶session id過來了,就會使用記憶體中與之對應的session為之服務。可以用如下的程式碼證明:

複製程式碼
 1 package xdp.gacl.session;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import javax.servlet.http.HttpSession;
 9 
10 public class SessionDemo1 extends HttpServlet {
11 
12     public void doGet(HttpServletRequest request, HttpServletResponse response)
13             throws ServletException, IOException {
14 
15         response.setCharacterEncoding("UTF=8");
16         response.setContentType("text/html;charset=UTF-8");
17         //使用request物件的getSession()獲取session,如果session不存在則建立一個
18         HttpSession session = request.getSession();
19         //將資料儲存到session中
20         session.setAttribute("data", "孤傲蒼狼");
21         //獲取session的Id
22         String sessionId = session.getId();
23         //判斷session是不是新建立的
24         if (session.isNew()) {
25             response.getWriter().print("session建立成功,session的id是:"+sessionId);
26         }else {
27             response.getWriter().print("伺服器已經存在該session了,session的id是:"+sessionId);
28         }
29     }
30 
31     public void doPost(HttpServletRequest request, HttpServletResponse response)
32             throws ServletException, IOException {
33         doGet(request, response);
34     }
35 }
複製程式碼

  第一次訪問時,伺服器會建立一個新的sesion,並且把session的Id以cookie的形式傳送給客戶端瀏覽器,如下圖所示:

  

  點選重新整理按鈕,再次請求伺服器,此時就可以看到瀏覽器再請求伺服器時,會把儲存到cookie中的session的Id一起傳遞到伺服器端了,如下圖所示:

  

  我猜想request.getSession()方法內部新建立了Session之後一定是做了如下的處理

複製程式碼
1 //獲取session的Id
2 String sessionId = session.getId();
3 //將session的Id儲存到名字為JSESSIONID的cookie中
4 Cookie cookie = new Cookie("JSESSIONID", sessionId);
5 //設定cookie的有效路徑
6 cookie.setPath(request.getContextPath());
7 response.addCookie(cookie);
複製程式碼

四、瀏覽器禁用Cookie後的session處理

4.1、IE8禁用cookie

  工具->internet選項->隱私->設定->將滑軸拉到最頂上(阻止所有cookies)

  

相關推薦

JavaWeb學習 ()————Session

一、Session簡單介紹   在WEB開發中,伺服器可以為每個使用者瀏覽器建立一個會話物件(session物件),注意:一個瀏覽器獨佔一個session物件(預設情況下)。因此,在需要儲存使用者資料時,伺服器程式可以把使用者資料寫到使用者瀏覽器獨佔的session中,當用戶使用瀏覽器訪問其它程式時,其它程

spring boot 學習()使用@Async實現異步調用

fontsize south 操作 dom img water 截圖 ota app 使用@Async實現異步調用 什麽是”異步調用”與”同步調用” “同步調用”就是程序按照一定的順序依次執行,,每一行程序代碼必須等上一行代碼執行完畢才能執行;”異步調用”則是只要上一行代碼

學習

log 刪除用戶 使用 pad image 創建組 信息 用戶配置文件 一行 三周第一次課(2月5日)2.27linux和windows互傳文件3.1 用戶配置文件和密碼配置文件3.2 用戶組管理3.3 用戶管理linux和windows互傳文件首先這裏要安裝lrzsz包

SpringMVC學習()——SpringMVC實現Resultful服務

控制 不用 extc service 靜態 pku net pub 技術 http://blog.csdn.net/yerenyuan_pku/article/details/72514034 Restful就是一個資源定位及資源操作的風格,不是標準也不是協議,只是一種

機器學習() 支持向量機 SVM(上)

gin 模型 結構 線性可分 adding 統計學習 lis 可能 方法 一、什麽是支撐向量機SVM (Support Vector Machine) SVM(Support Vector Machine)指的是支持向量機,是常見的一種判別方法。在機器學習領域,是一個有監

<C++學習>標準庫string的使用(未完待續)

clu size_t ... namespace art ring star using start   使用:   1、C++標準庫負責管理和存儲字符串所占用的內存;   2、頭文件:#include<string>   3、空間域:using namespa

SpringMVC 學習 springMVC控制器向jsp或者別的控制器傳遞引數的四種方法

以後的開發,大部分是傳送ajax,因此這四種傳遞引數的方法,並不太常用。作為了解吧 第一種:使用原生 Servlet 在控制器的響應的方法中新增Servlet中的一些作用域:HttpRequestServlet,或者HttpSession。 【注意】在方法中,ServletContext的物件是不能作為

強化學習(二) Dueling DQN 強化學習() Prioritized Replay DQN

    在強化學習(十一) Prioritized Replay DQN中,我們討論了對DQN的經驗回放池按權重取樣來優化DQN演算法的方法,本文討論另一種優化方法,Dueling DQN。本章內容主要參考了ICML 2016的deep RL tutorial和Dueling DQN的論文<Duelin

springMVC3學習()--檔案上傳CommonsMultipartFile

使用springMVC提供的CommonsMultipartFile類進行讀取檔案 需要用到上傳檔案的兩個jar包 commons-logging.jar、commons-io-xxx.jar 1、在spring配置檔案中配置檔案上傳解析器

JavaWeb學習筆記()——JavaWeb基礎知識

一、基本概念 1、Web開發的相關知識 靜態Web:指任何時間訪問內容都一致的Web介面(哪怕介面有動畫,只要內容不變都屬於靜態頁面) 動態Web:指訪問內容隨時間改變的Web介面(一般涉及到與資料庫互動) 靜態web技術:html/css 動態web技術:JSP/Servlet

Android JNI 學習():Invocation Api

1. 簡介 Invocation API允許軟體提供商在原生程式中內嵌Java虛擬機器。因此可以不需要連結任何Java虛擬機器程式碼來提供Java-enabled的應用程式。 以下程式碼演示如何使用: #include <jni.h> /* where everyt

Java的GUI學習(程式設計選單)

滴滴:想看的話看這個blog 學習來自: http://www.cnblogs.com/xingyunblog/p/3871100.html   import java.awt.FlowLayout; import java.awt.Frame; import java.awt

JMS學習 ActiveMQ Consumer高階特性之獨有消費者(Exclusive Consumer)

一、簡介 Queue中的訊息是按照順序被分發到consumers的。然而,當你有多個consumers同時從相同的queue中提取訊息時, 你將失去這個保證。因為這些訊息是被多個執行緒併發的處理。有的時候,保證訊息按照順序處理是很重要的。 如,你可能不希望在插入訂單操作結束之前執行更新這

java多執行緒學習() 常見的單例模式執行緒安全性分析

類初始化鎖  怎麼理解? 為什麼需要了解? 常見的單例模式分析 懶漢式 為什麼執行緒不安全 驗證 餓漢式 為什麼執行緒安全 雙重檢查鎖定方式 演變由來 為什麼執行緒不安全 如何解決執行緒不安全 靜態類方式 為什麼執行緒安全 結

vue學習(prop傳不同值、 v-bind 動態賦值、單向資料流、prop校驗)

區域性註冊 在這些情況下,你可以通過一個普通的 JavaScript 物件來定義元件: var ComponentA = { /* ... */ } 然後在 components 選項中定義你想要使用的元件: new Vue({ el: '#app',

JavaWeb學習總結(十三)——Session

一、Session簡單介紹      在WEB開發中,伺服器可以為每個使用者瀏覽器建立一個會話物件(session物件),注意:一個瀏覽器獨佔一個session物件(預設情況下)。因此,在需要儲存使用者資料時,伺服器程式可以把使用者資料寫到使用者瀏覽器獨佔的session中

強化學習() Prioritized Replay DQN

    在強化學習(十)Double DQN (DDQN)中,我們講到了DDQN使用兩個Q網路,用當前Q網路計算最大Q值對應的動作,用目標Q網路計算這個最大動作對應的目標Q值,進而消除貪婪法帶來的偏差。今天我們在DDQN的基礎上,對經驗回放部分的邏輯做優化。對應的演算法是Prioritized Replay

springMVC3學習 --檔案上傳CommonsMultipartFile

使用springMVC提供的CommonsMultipartFile類進行讀取檔案 需要用到上傳檔案的兩個jar包 commons-logging.jar、commons-io-xxx.jar 1、在spring配置檔案中配置檔案上傳解析器   <!-- 檔案上傳解析器

CSS基礎學習:選擇器的優先順序

        在CSS基礎學習的篇章中,從第四篇部落格開始說選擇器,到昨天基本已經說完了。今天我們總結一下,選擇器作 用:告知瀏覽器需要設定哪個dom元素的樣式。最後來說說選擇器一個重要的問題,選擇

JavaWeb)---過濾器(Filter)

過濾器(Filter) 概念: 它會在一組資源的前面執行,它可請求得到資源,也可以不讓。過濾器具有攔截請求的功能 和Servlet一樣,Filter是單例併發的。 使用方法 寫一個類實現Filter介面 在web.xml上配置 <filter&g