cookie是什么?有什么用?cookie詳解,一篇文章徹底搞懂cookie | 您所在的位置:網(wǎng)站首頁 › 個號碼復式三中三有多少組 › cookie是什么?有什么用?cookie詳解,一篇文章徹底搞懂cookie |
Cookie是什么
????????cookie的中文翻譯是曲奇,小甜餅的意思。cookie其實就是一些數(shù)據(jù)信息,類型為“小型文本文件”,存儲于電腦上的文本文件中。 Cookie有什么用????????我們想象一個場景,當我們打開一個網(wǎng)站時,如果這個網(wǎng)站我們曾經登錄過,那么當我們再次打開網(wǎng)站時,發(fā)現(xiàn)就不需要再次登錄了,而是直接進入了首頁。例如bilibili,csdn等網(wǎng)站。 ????????這是怎么做到的呢?其實就是游覽器保存了我們的cookie,里面記錄了一些信息,當然,這些cookie是服務器創(chuàng)建后返回給游覽器的。游覽器只進行了保存。下面展示bilibili網(wǎng)站保存的cookie。 ? ? ? ? 一般情況下,cookie是以鍵值對進行表示的(key-value),例如name=jack,這個就表示cookie的名字是name,cookie攜帶的值是jack。 Cookie的組成? ? ? ? 下面我自己寫了一個簡易Servlet來設置cookie,我們游覽器抓包進行查看。然后進行分析 ? ? ? ? ?以下是cookie中常用屬性的解釋。 Name:這個是cookie的名字Value:這個是cooke的值Path:這個定義了Web站點上可以訪問該Cookie的目錄Expires:這個值表示cookie的過期時間,也就是有效值,cookie在這個值之前都有效。Size:這個表示cookie的大小? ? ? ? 想要完全了解所有cookie屬性,請參考百度知道:cookie Cookie的HTTP傳輸? ? ? ? 我們還是通過抓包進行查看。首先查看cookie在HTTP請求中是怎樣進行表示的。 HTTP請求 ? ? ? ? 我們在發(fā)送HTTP請求時,發(fā)現(xiàn)游覽器將我們的cookie都進行了攜帶(注意:游覽器只會攜帶在當前請求的url中包含了該cookie中path值的cookie),并且是以key:value的形式進行表示的。多個cookie用;進行隔開。? ? ? ? ? 我們再來查看cookie在HTTP響應中是如何進行表示的。 HTTP響應 ? ? ? ? 我在服務器設置了2個cookie,返回給游覽器。通過抓包,我們發(fā)現(xiàn)在HTTP響應中,?cookie的表示形式是,Set-Cookie:cookie的名字,cookie的值。如果有多個cookie,那么在HTTP響應中就使用多個Set-Cookie進行表示。 Cookie的生命周期? ? ? ? cookie有2種存儲方式,一種是會話性,一種是持久性。 會話性:如果cookie為會話性,那么cookie僅會保存在客戶端的內存中,當我們關閉客服端時cookie也就失效了持久性:如果cookie為持久性,那么cookie會保存在用戶的硬盤中,直至生存期結束或者用戶主動將其銷毀。? ? ? ? cookie我們是可以進行設置的,我們可以人為設置cookie的有效時間,什么時候創(chuàng)建,什么時候銷毀。 Cookie使用的常見方法? ? ? ? 下面,我對java中Cookie對象的方法進行講解 new Cookie(String name, String value):創(chuàng)建一個Cookie對象,必須傳入cookie的名字和cookie的值getValue():得到cookie保存的值getName():獲取cookie的名字setMaxAge(int expiry):設置cookie的有效期,默認為-1。這個如果設置負數(shù),表示客服端關閉,cookie就會刪除。0表示馬上刪除。正數(shù)表示有效時間,單位是秒。setPath(String uri):設置cookie的作用域? ? ? ? HttpServletRequest和HttpServletResponse對Cookie進行作的常見方法 response.addCookie(Cookie cookie):將cookie給客戶端進行保存resquest.getCookies():得到客服端傳過來的所有cookie對象 Cookie應用實例? ? ? ? 我們使用cookie來實現(xiàn)一個功能,就是當用戶登錄成功后,我們在下次登錄時就自動填入用戶名和密碼。這個功能我們使用cookie和jsp頁面來完成(用html頁面也可以,只不過要使用javascript,有點麻煩,所以就使用jsp進行演示) ? ? ? ? 我們首先寫一個簡單的jsp頁面,就是一個登錄頁面 ????????JSP頁面 登錄 用戶名: 密 碼:請求轉發(fā)頁面,我們是通過訪問Servlet轉發(fā)到jsp頁面的,而不是直接訪問。 import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; @WebServlet("/cookieLogin") public class CookieLogin extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //設置默認值 request.setAttribute("username",""); request.setAttribute("password",""); //得到所有cookie Cookie[] cookies = request.getCookies(); //對所有cookie進行遍歷 for (Cookie cookie : cookies) { //得到存儲用戶名和密碼的cookie并且存入request域中 if ("username".equals(cookie.getName())){ String value = cookie.getValue(); request.setAttribute("username",value); } if("password".equals(cookie.getName())){ String value = cookie.getValue(); request.setAttribute("password",value); } } //轉發(fā)到login.jsp頁面 request.getRequestDispatcher("/login.jsp").forward(request,response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }登錄成功后的首頁 import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; @WebServlet("/main") public class MainServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //設置響應類型 response.setContentType("text/html;charset=utf-8"); //得到用戶名和密碼 String username = request.getParameter("username"); String password = request.getParameter("password"); //判斷是否登錄成功 if ("root".equals(username) && "root".equals(password)) { //編寫cookie Cookie usernameCookie = new Cookie("username", username); Cookie passwordCookie = new Cookie("password", password); //設置有效時間,我這里設置3天有效 usernameCookie.setMaxAge(60 * 60 * 24 * 3); passwordCookie.setMaxAge(60 * 60 * 24 * 3); //存入客戶端 response.addCookie(usernameCookie); response.addCookie(passwordCookie); //返回提示 response.getWriter().write("登錄成功~~~~"); }else { response.getWriter().write("登錄失敗...."); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }? ? ? ? 下面我們來進行測試一下,首先訪問http://localhost:8080/cs/cookieLogin,我們這里設置的虛擬路徑是cs,下面是我們訪問cookieLogin顯示的頁面。發(fā)現(xiàn)確實沒有自動填寫,因為我們還沒有登錄。游覽器中也沒有存有用戶名和密碼的cookie ? ? ? ? ?輸入正確的賬號和密碼進行登錄。也就是賬號和密碼都輸入root,頁面顯示登錄成功 ? ? ? ? 下面我們來查看游覽器是否存儲了用戶名和密碼的cookie ? ? ? ? 游覽器確實存儲了cookie,沒有問題,接下來,我們關閉游覽器后重新訪問登錄頁面。? ? ? ? ? ?我們一訪問登錄頁面,用戶名和密碼就自動填寫了,成功實現(xiàn)了功能 總結?? ? ? ? Cookie就是一些數(shù)據(jù),用于存儲服務器返回給客服端的信息,客戶端進行保存。在下一次訪問該網(wǎng)站時,客戶端會將保存的cookie一同發(fā)給服務器,服務器再利用cookie進行一些作。利用cookie我們就可以實現(xiàn)自動登錄,保存游覽歷史,身份驗證等功能。 |
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實驗室設備網(wǎng) 版權所有 |