- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- 淺談Servlet的Cookie和Session機制
Cookies定義:Cookies是存儲在客戶(hù)端計算機上的文本文件,并保留了用戶(hù)的各種跟蹤信息。
Cookies作用:會(huì )話(huà)保持,如完成用戶(hù)的登錄與狀態(tài)保持
Cookies的工作原理:
客戶(hù)端向服務(wù)區發(fā)起登錄請求
服務(wù)器腳本(代碼)向瀏覽器發(fā)送一組Cookies,例如:姓名,年齡等
瀏覽器將這些信息存儲在本地計算機上,以備將來(lái)使用
當下一次瀏覽器向web服務(wù)器發(fā)送任何請求時(shí)。瀏覽器會(huì )把這些Cookies信息發(fā)送到服務(wù)器,服務(wù)器將使用這些信息來(lái)識別賬戶(hù)
Cookies通常設置在HTTP頭信息中,設置Cookie的http請求,會(huì )向Servlet發(fā)送如下信息
如果用戶(hù)端的瀏覽器指向任何匹配該Cookie的路徑和域的頁(yè)面,他會(huì )重新發(fā)送Cookie到服務(wù)器,瀏覽器的頭信息可能會(huì )如下:
此時(shí)Servlet就能夠通過(guò)請求方法request.getCookies()訪(fǎng)問(wèn)Cookie,該方法將返回一個(gè)Cookie對象的數組
具體步驟,創(chuàng )建兩個(gè)后端類(lèi),分別為:
設置cookie信息代碼
import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class SetCookieServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.創(chuàng )建Cookie對象 //首先需要一個(gè)cookie對象,這里我們需要兩個(gè)cookie對象,一個(gè)來(lái)存儲用戶(hù)名(username——java),一個(gè)來(lái)存儲密碼(pwd——javas) Cookie username = new Cookie("uesrname","java"); Cookie pwd = new Cookie("pwd","javas"); //當我們創(chuàng )建好兩個(gè)cookie對象之后,就可以對這兩個(gè)對象進(jìn)行一系列操作 //比如:設置他的過(guò)期時(shí)間,這里我們將username的過(guò)期時(shí)間設置為永久 username.setMaxAge(-1); //密碼pwd的過(guò)期時(shí)間設置為一分鐘,注意他的過(guò)期時(shí)間是以秒為單位 pwd.setMaxAge(60); //2.將 Cookie 對象關(guān)聯(lián)到response上 resp.addCookie(username); resp.addCookie(pwd); //顯示給用戶(hù)部分的信息 resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html"); //然后寫(xiě)入響應給客戶(hù)端的內容 PrintWriter writer = resp.getWriter(); writer.println("<h1>Cookie 設置成功</h1>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
注意:一定不要忘記配置web.xml文件
結果驗證:
獲取cookie信息代碼
import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class GetCookieServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //讀取Cookie的信息 //因為客戶(hù)端的cookie可能會(huì )有多個(gè),所以我們使用數組來(lái)接收,注意:cookie是從request獲取的 Cookie[] cookies = req.getCookies(); resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); PrintWriter writer = resp.getWriter(); //然后讀取cookie的內容 for (Cookie item: cookies ) { writer.println(String.format("<h1>Cookie key: %s,Cookie value: %s</h1>",item.getName(),item.getValue())); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
注意:
1.不要忘記配置web.xml文件
2.因為上面我們設置cookie信息的時(shí)候,pwd的過(guò)期時(shí)間為一分鐘,當我們要去獲取cookie信息的時(shí)候就看時(shí)間不夠,所以建議修改更長(cháng)的過(guò)期時(shí)間。
Session定義:session是存儲在服務(wù)器上的文本文件,并保留用戶(hù)的各種跟蹤信息
Session作用:會(huì )話(huà)保持,如完成用戶(hù)的登錄與狀態(tài)保持,因為在服務(wù)器端,所以相對安全一些。
Session在Servlet里的存儲形式
session是借助cookie實(shí)現的
HttpSession對象
HttpSession 對象中可用的幾個(gè)重要的方法:
小知識點(diǎn):session都是通過(guò)request進(jìn)行操作,而cookie是通過(guò)request和response進(jìn)行操作。
關(guān)于session的讀寫(xiě)操作代碼
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; public class SessionServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //關(guān)于 session 的讀寫(xiě) //1.先獲取到session到對象 HttpSession session = req.getSession(); //2.得到session的屬性 //2.1獲取到session的ID String sessionID = session.getId(); //返回響應信息 resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); PrintWriter writer = resp.getWriter(); writer.println("<h1>歡迎訪(fǎng)問(wèn)頁(yè)面</h1>"); //輸出sessionID writer.println(String.format("<h3>SessionID : %s </h3>",sessionID)); //輸出session的創(chuàng )建時(shí)間,因為session的創(chuàng )建時(shí)間是一個(gè)時(shí)間戳,所以我們需要將其強轉成我們能看得懂的時(shí)間 writer.println(String.format("<h3>Session創(chuàng )建時(shí)間: %s</h3>",new Date(session.getCreationTime()))); //輸出session的最后訪(fǎng)問(wèn)時(shí)間 writer.println(String.format("<h3>Session的最后訪(fǎng)問(wèn)時(shí)間: %S</h3>",new Date(session.getLastAccessedTime()))); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
到此這篇關(guān)于淺談Servlet的Cookie和Session機制的文章就介紹到這了,更多相關(guān)Servlet的Cookie和Session內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站