Java web后端4 會話 Cookie Session

會話

會話:指的是一個客戶端(瀏覽器)與Web服務器之間連續發生的一系列請求和響應的過程。

客戶端和服務器的請求和響應的過程(對話雙方只要有一方發生變化,都屬于不同的會話)
超時間隔【距離上一次請求的間隔】,超時后就屬于不同的會話
HTTP是無狀態的,不保存用戶信息
Cookie客戶端
Session服務器
在這里插入圖片描述

Cookie

Cookie是一種會話技術,它用于將會話過程中的數據保存到用戶的瀏覽器中【保存在客戶端的磁盤或緩存(內存)中】,從而使瀏覽器和服務器可以更好地進行數據交互。

在這里插入圖片描述

在這里插入圖片描述
用戶第一次訪問時,沒有Cookie
在這里插入圖片描述

Cookie API

在這里插入圖片描述
Cookie的相關方法
在這里插入圖片描述

Cookie–setMaxAge()和getMaxAge()

負數:瀏覽器一關,緩存就會清空【將Cookie保存在瀏覽器的緩存中】
默認為-1

在這里插入圖片描述

Cookie的案例

/*** Illustration** @author dengqing* @time 2021/10/13* @function cookie上次訪問時間*/@WebServlet(name = "Cookie1", value = "/cookie1")
public class Cookie1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html; charset=UTF-8");//字符輸出流PrintWriter out = response.getWriter();Date date = new Date();//格式化輸出SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");//獲取當前時間String NowTime = sdf.format(date);//創建Cookie對象并保存當前時間到Cookie對象之中Cookie cookie = new Cookie("LastTime", NowTime);//將Cookie信息回寫至客戶端瀏覽器response.addCookie(cookie);//設置cookie保存在磁盤中,為90秒;90秒后失效cookie.setMaxAge(90);//把瀏覽器中所有Cookie返回//Cookie[] cookies:Cookie對象數組Cookie[] cookies = request.getCookies();String LastAccessTime = null;//如果cookies不為空,再循環,防止空指針異常if (cookies != null) {//增強型for循環for (Cookie c : cookies) {//匹配是否有"LastTime" Cookie//"LastTime"字符串寫在前面,防止空指針異常if ("LastTime".equals(c.getName())) {//獲取Cookie的值,如果為空,則為瀏覽器第一次訪問LastAccessTime = c.getValue();}}}//Cookie的值,如果為空,則為瀏覽器第一次訪問if (LastAccessTime.isEmpty()) {out.write("你是首次訪問本站!");} else {//每次刷新,就會重新計算90秒:cookie.setMaxAge(90);//90秒后失效,就又會顯示:你是首次訪問本站!out.write("你上次訪問本站的時間:" + LastAccessTime);}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

Session會話

Cookie是鍵值對,不能存儲大量數據【每次放在請求頭中】,并且不安全,效率低
所以使用Session存儲大量數據,Session是一種將會話數據保存到服務器端的技術
說會話,指Session

Session的創建,由Servlet容器在發起會話時自動創建
當瀏覽器訪問Web服務器時,Servlet容器就會創建一個Session對象和ID屬性【32位16進制,16的32次方,2^128次方,ID不會重復,類似IPv6,64位】,當客戶端后續訪問服務器時,只要將標識號傳遞給服務器,服務器就能判斷出該請求是哪個客戶端發送的,從而選擇與之對應的Session對象為其服務。

由于客戶端需要接收、記錄和回送Session對象的ID,因此,通常情況下,Session是借助Cookie技術來傳遞ID屬性的。
在這里插入圖片描述

Session原理

在這里插入圖片描述
Session是通過Cookie技術實現的,依賴于名為JSESSIONID的Cookie,它將信息保存在服務器端。Session中能夠存儲復雜的Java對象,因此使用更加方便。如果客戶端不支持Cookie,或者禁用了Cookie,仍然可以通過使用URL重寫來使用Session。
在這里插入圖片描述

在這里插入圖片描述

Session-獲取Session對象

不同的請求對象獲取的Session對象,不一定不同;因為可能是處于同一次會話
同一個瀏覽器的不同窗口是同一個Session;不同的瀏覽器是不同Session

在這里插入圖片描述
在這里插入圖片描述

Session相關方法

大型項目一般使用時間戳,國內外一致【getLastAccessedTime()】
Sesssion超時,設置為分鐘,在超時時間內如果沒有任何請求則超時
在這里插入圖片描述

invalidate():類似刪除Session

在這里插入圖片描述

Tomcat的Session超時設置

在這里插入圖片描述

Session案例

瀏覽器不同窗口屬于同一次會話
瀏覽器關閉,則結束會話了

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

loginServlet.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--等效-->
<!--action="http://localhost:8082/WebServletProject_war_exploded/loginServlet"-->
<form action="loginServlet"><!--div標簽:把組件分割開--><!--placeholder 是HTML5 中新增的一個屬性。placeholder可以用來描述輸入字段預期值的簡短的提示信息。提示信息會在用戶輸入值之前顯示,一旦用戶輸入信息該提示就會自動消失。--><!--placeholder :提示用戶輸入信息--><div><input type="text" name="uname" placeholder="用戶名"></div><input type="password" name="upwd" placeholder="密碼"></br><div><input type="submit" value="登錄"></div></form>
</body>
</html>

LoginServlet.java

/*** Illustration** @author dengqing* @time 2021/10/13* @function Session:實現登錄成功后存入Session;獲取Sesssion數據*///http://localhost:8082/WebServletProject_war_exploded/loginServlet.html
@WebServlet(name = "LoginServlet", value = "/loginServlet")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();System.out.println("進入loginServlet登錄頁面...");//獲取login.html頁面用戶輸入的值String name = request.getParameter("uname");String pwd = request.getParameter("upwd");if ("admin".equals(name) && "123".equals(pwd)) {//獲取對話SessionHttpSession session = request.getSession();//將當前用戶的名稱存入Sessionsession.setAttribute("user",name);//<script>alert('登錄成功')</script>:JavaScript,彈出警告框out.write("<script>alert('登錄成功')</script>");response.sendRedirect("mainServlet");} else {out.write("用戶名或密碼輸入錯誤");response.sendRedirect("loginServlet.html");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

MainServlet.java

@WebServlet(name = "MainServlet", value = "/mainServlet")
public class MainServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();//獲取當前對話的Session對象HttpSession session = request.getSession();//獲取Session的用戶名稱Object user = session.getAttribute("user");//不為空,之前已經登錄過,直接訪問if (user!=null){out.write("進入MainServelt主頁面");out.write("歡迎回來!"+(String)user);}else {out.write("你還沒有登錄,請先登錄后再訪問此頁面!\n");out.write("<a href='loginServlet.html'>點擊此處進行登錄!</a>");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

Java Bean

JavaBean符合一定規范寫的Java類,是一種規范。它的方法命名,構造以及行為必須符合特定的要求:
1.所有屬性為private
2.這個類必須具有一個公共的(public)無參構造函數
3.private屬性必須提供public的getter和setter來給外部訪問,并且方法的命名也必須遵循一定的命名規范
4.這個類是可序列化的,要實現serializable接口

JavaBean,類必須是具體的和公共的,并且具有無參數的構造器。JavaBean 通過提供符合一致性設計模式的公共方法將內部域暴露成員屬性。眾所周知,屬性名稱符合這種模式,其他Java 類可以通過自身機制發現和操作這些JavaBean 的屬性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446386.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446386.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446386.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

將安全信息應用到以下對象時發生錯誤 拒絕訪問_手機資訊:拒絕「京東金融」事件再次發生|如何避免iPhone 應用私自獲取照片...

如今使用IT數碼設備的小伙伴們是越來越多了&#xff0c;那么IT數碼設備當中是有很多知識的&#xff0c;這些知識很多小伙伴一般都是不知道的&#xff0c;就好比最近就有很多小伙伴們想要知道拒絕「京東金融」事件再次發生|如何避免iPhone 應用私自獲取照片&#xff0c;那么既然…

走臺階一共有多少種走法

可以走1臺階 2臺階 3臺階 long long MoveStairs(int total){if (total < 4) {return total 3 ? 4 : total;}int a 1, b 2, c 4;for (int i 4; i < total; i) {int temp (a b) % 1000000007 c;a b;b c;c temp % 1000000007;}return c; }

C/C++藍橋杯1 備賽準備

藍橋杯信息 算法基礎學習 1.學習C基礎語法 2. 3.做藍橋杯的真題 賽題&#xff1a;情況 賽題&#xff1a;國賽 賽題&#xff1a;暴力數學練習 暴力的題目類型

手機qq表白代碼大全可復制_街機游戲大全~手機版

街機游戲大全~手機版安卓&#xff1a;街機游戲大全~手機版1、街機游戲2、經典游戲游戲介紹安卓手機街機游戲1500合集&#xff0c;街機模擬器街機游戲可以說是一代80、90后的童年回憶&#xff0c;此合集收錄1500多款街機經典游戲&#xff0c;僅限安卓系統&#xff0c;這么多游戲…

C++面試 語言基礎

指針和引用之間的區別 指針是一個新的變量&#xff0c;指向一個變量的地址。可以通過這個地址來修改另一個變量&#xff1b;引用是變量的別名&#xff0c;對引用的操作就是對變量本身的操作。int a 996; int *p &a;//p是指針&#xff0c;&在此是求地址運算 int &…

中科大 計算機網絡13 FTP文件傳輸協議

FTP FTP&#xff1a;文件傳輸協議 早期分享文件采用FTP方式 客戶端&#xff1a;下載文件 服務器&#xff1a;上傳文件 FTP:控制連接 先建立控制連接【調用一系列Socket API】&#xff0c;服務器守候在21端口;進行身份認證【用戶名和口令&#xff0c;明文傳輸】&#xff1b;…

ulead gif animator_搞笑GIF趣圖:這風看來很大啊,今天回不來家了7

原標題&#xff1a;搞笑GIF趣圖&#xff1a;這風看來很大啊&#xff0c;今天回不來家了7每天更新搞笑GIF趣圖&#xff0c;歡迎關注。這風看來很大啊&#xff0c;今天回不來家了&#xff0c;哈哈狗生最痛苦的事一 灘 貓過個生日 又少了個朋友找到單身的理由了這咋還往回炸爆笑GI…

圖像放大 問題 即 二維數組放大

參考鏈接 參考鏈接 #include <iostream> #include <vector>int N0,K0;int main(){std::cin>>N>>K;std::vector<std::vector<int>>input(N,std::vector<int>(N, 0)); // std::cout << N << " " << K…

pictureselector 圖片路徑_AI圖片無損放大軟件

?不知道大家有沒有使用過下面的AI智能圖片放大網站&#xff0c;他的圖片放大效果整體尚可&#xff0c;但是在高倍放大需要收費&#xff0c;且對圖片尺寸和文件大小有一定的限制&#xff0c;今天給大家推薦一款Topaz Labs公司開發的圖片無損放大軟件(免費使用的哦)。軟件介紹這…

中科大 計算機網絡14 EMail SMTP簡單郵件傳輸協議 POP3郵件傳輸協議 IMAP消息訪問協議 HTTP超文本傳輸協議

EMail&#xff1a;電子郵件 協議包括發送和拉取的協議 發送的協議&#xff1a;SMTP簡單郵件傳輸協議 拉取的協議&#xff1a;POP3郵件傳輸協議,IMAP消息訪問協議,HTTP超文本傳輸協議 HTTP超文本傳輸協議&#xff1a; 可以上載POST和下載GET文件; 用戶代理&#xff1a;撰寫發…

人工智能工程師需具備的技能_2020年軟件測試工程師需要具備的技能--需要學什么--面試題有哪些(靈魂拷問)...

一、2020年軟件測試行業的現狀2020年開年&#xff0c;一不小心&#xff0c;【新冠】黑天鵝從頭上飄過&#xff0c;持續影響全國乃至全球的經濟&#xff0c;軟件行業公司也迎來了不少的沖擊&#xff0c;那么一直打算入行軟件測試行業&#xff0c;或者已經在軟件測試行業耕耘多年…

C++ 標準庫 書籍學習記錄筆記 第5章

5.3 迭代器 前置式遞增比后置式遞增效率更高&#xff0c;因為后者需要一個額外的臨時對象&#xff0c;因為他需要存儲一個迭代器原本的位置并將其進行返還&#xff0c;因此最好使用pos&#xff0c;而不是pos&#xff1b; 5.3.1 關聯式容器的運用實例 修改map默認的遞增的方式…

中科大 計算機網絡15 DNS域名解析系統

DNS的必要性 DNS域名解析系統&#xff1a;不是直接給人使用的&#xff0c;而是給其他應用使用的 域名到IP地址的轉換【使用&#xff1a;web應用&#xff0c;FTP應用。。。】 在應用層跑的基礎設施&#xff0c;為其他應用而使用 網絡層的工作的設備使用IP地址&#xff0c;用來…

面試題目匯總

1&#xff0c;for循環的時間復雜度 兩層for循環 第二層中 的循環變量繼承與上層變量時間復雜度是O(n^2)for循環時間復雜度算法理解_bingkxin的專欄-CSDN博客_for循環時間復雜度 for(int i0;i<N;i) {for(int ji;j<N;j){//此處運行次數:NN-1N-2...1123...NN(N1)/2} } for(…

C++基礎1 數據類型 常量

使用Dev CPP作為編程環境、 注意dev cpp5.4.0沒有格式化代碼功能&#xff0c;不要再設置了 設置的常用快捷鍵 CtrE:多行注釋 CtrlShiftE:取消多行注釋 CtrlZ&#xff1a;撤銷 CtrlShiftZ:取消撤銷 CtrlL:折疊函數 CtrlShifL:取消折疊函數 設置Dev Cpp Dev C初始化&#xf…

amd核芯顯卡控制面板自定義分辨率_顯卡天梯圖2020最新版 2020年5月顯卡排行榜天梯圖...

轉眼五月份就到來了&#xff0c;最近各大廠商可謂是你方唱罷我登場啊&#xff0c;發布會一場接著一場&#xff0c;新品和概念產品等一個接著一個的放出&#xff0c;我相信很多小伙伴們都迫不及待了&#xff01;~下面和小編一起來看看吧。2020年5月顯卡排行榜天梯圖&#xff1a;…

Python學習9 面向對象 類和對象

面向對象和面向過程 類和對象 類的設計 類的創建 self:相當于當前對象&#xff1b;類似于Java中的this 類的創建和使用&#xff1a; #類的命名&#xff1a;每個單詞首字母大寫 class Dog:#屬性name dogage 11#方法def eat(self):print(eat rice!)dog Dog() print(dog.n…

刷機提示圖像和設備不匹配_安卓5.0升級失敗如何解決 安卓5.0刷機失敗解決方法介紹【教程】...

安卓5.0升級失敗怎么辦?安卓5.0刷機失敗急救方法?谷歌發布了適用于Nexus系列的Android 5.0系統&#xff0c;但是&#xff0c;刷安卓5.0系統時遇到system.img系統鏡像找不到的錯誤提示是怎么回事?谷歌終于發布了適用于Nexus系列的Android 5.0底包和OTA推送&#xff0c;不過第…

華為模擬器eNSP1

eNSP介紹 網絡仿真工具平臺 路由器AR

postman 不安全網站_接口工具分析(apipost、jmeter、postman)

一、接口都有哪些類型&#xff1f;接口一般分為兩種&#xff1a;1.程序內部的接口 2.系統對外的接口系統對外的接口&#xff1a;比如你要從別的網站或服務器上獲取資源或信息&#xff0c;別人肯定不會把 數據庫共享給你&#xff0c;他只能給你提供一個他們寫好的方法來獲取數據…