Cookie在Java中的使用
什么是Cookie
在現(xiàn)實生活中,當顧客第一次在超市購物,通常服務員會詢問是否辦理一張會員卡來積分以便日后折扣等福利活動。會員卡會記錄顧客的姓名、積分、消費記錄等信息,如果顧客要參與超市的福利活動等都需要提供會員卡,服務員在后臺刷卡查詢即可知道是哪個用戶在使用會員卡。
現(xiàn)在將現(xiàn)實生活中的案例中的角色互換一下。
當用戶沒有在Web服務器登記過用戶信息,而使用網站提供的需登錄的服務時,服務器會告知瀏覽器跳轉到登陸頁面進行用戶信息的登記操作,登錄完成之后,瀏覽器向服務器發(fā)起一次登陸請求,服務器將用戶的信息存儲到Cookie中,并響應給瀏覽器新的Cookie,瀏覽器得到Cookie之后將它存儲到緩存區(qū)。
當用戶在Web服務器登記過用戶信息,而使用網站提供的需登錄的服務時,服務器會通過請求中攜帶的Cookie判斷此次請求時哪個用戶,并以這個Cookie的信息去查詢數(shù)據(jù)庫等操作,完成用戶需要的服務。
Cookie的必要
HTTP是無狀態(tài)協(xié)議,意味著服務器不會在兩個請求之間保留任何數(shù)據(jù)(狀態(tài))。由于Web服務器要面對很多用戶的并發(fā)訪問,為了提高Web服務器對并發(fā)訪問的處理能力,在設計HTTP協(xié)議時規(guī)定Web服務器發(fā)送HTTP應答報文和文檔時,不保存發(fā)出請求的Web瀏覽器進程的任何狀態(tài)信息,從而減輕服務器端的負載,同時無狀態(tài)也減小了HTTP請求的開銷。
但是在必要的場景,如登陸、購物等都需要保存用戶的狀態(tài)(信息),就不得不用到Cookie。
Cookie如何工作
第一次訪問服務器,沒有Cookie,向服務器登記新的Cookie。
第二次及以后訪問服務器,有Cookie,無需登記新的Cookie。
模擬用戶登錄
需求分析:
當用戶訪問homepage.jsp時,判斷請求中是否攜帶username的Cookie,如果不存在就通知瀏覽器跳轉到登錄頁面進行用戶信息的登記。當用戶再次訪問homepae.jsp時,不會被攔截,可以讓用戶訪問個人主頁頁面。
編寫代碼:
個人主頁的Servlet
@WebServlet(name = "homepageServlet", urlPatterns = "/homepage") public class HomePageServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Cookie[] cookies = req.getCookies(); for (Cookie cookie : cookies) { if (!cookie.getName().equals("username")) { // 如果用戶是第一次訪問個人主頁,就通知瀏覽器跳轉到登陸頁面進行登錄 resp.sendRedirect(req.getContextPath() + "/login.jsp"); } } } }
用戶登錄的Servlet
@WebServlet(name = "loginServlet", urlPatterns = "/login") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 獲取http請求參數(shù)username String username = request.getParameter("username"); // 設置響應內容的類型 response.setContentType("text/html;charset=utf-8"); // 獲取Cookie值 Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { if (!cookie.getName().equals("username")) { // 用戶第一次訪問 Cookie userCookie = new Cookie("username", username); userCookie.setMaxAge(300); response.addCookie(userCookie); } response.sendRedirect(request.getContextPath() + "/homepage.jsp"); } } }
打開瀏覽器,實驗一下:
在第一次訪問homepage頁面時,看到瀏覽器緩存區(qū)并沒有名為username的Cookie,只有當?shù)卿浿?,瀏覽器緩存區(qū)才有了這個Cookie。
以上就是Cookie在Java中的使用的詳細內容,更多關于Cookie的使用的資料請關注腳本之家其它相關文章!
相關文章
SpringBoot整合Vue實現(xiàn)微信掃碼支付以及微信退款功能詳解
最近公司要在微信公眾號上做一個活動預報名,活動的門票等需要在微信中支付,下面這篇文章主要給大家介紹了關于SpringBoot整合Vue實現(xiàn)微信掃碼支付以及微信退款功能的相關資料,需要的朋友可以參考下2022-05-05SpringBoot用JdbcTemplates訪問Mysql實例代碼
本篇文章主要介紹了SpringBoot用JdbcTemplates訪問Mysql實例代碼,非常具有實用價值,需要的朋友可以參考下2017-05-05SpringBoot中@EnableAutoConfiguration注解的實現(xiàn)
Spring Boot@EnableAutoConfiguration是一個強大的工具,可以簡化配置過程,從而實現(xiàn)快速開發(fā),本文主要介紹了SpringBoot中@EnableAutoConfiguration注解的實現(xiàn),感興趣的可以了解一下2024-01-01Spring boot如何通過@Scheduled實現(xiàn)定時任務及多線程配置
這篇文章主要介紹了Spring boot如何通過@Scheduled實現(xiàn)定時任務及多線程配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12SpringSecurity集成第三方登錄過程詳解(最新推薦)
在ThirdAuthenticationFilter 類的attemptAuthentication()方法中,我們通過authType類型,然后創(chuàng)建對應的Authentication實現(xiàn)來實現(xiàn)不同方式的登錄,下面給大家分享SpringSecurity集成第三方登錄過程,感興趣的朋友一起看看吧2024-05-05關于SpringSecurity配置403權限訪問頁面的完整代碼
本文給大家分享SpringSecurity配置403權限訪問頁面的完整代碼,配置之前和配置之后的詳細介紹,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-06-06java 裝飾模式(Decorator Pattern)詳解及實例代碼
裝飾器模式(Decorator Pattern)允許向一個現(xiàn)有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現(xiàn)有的類的一個包裝2016-10-10