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