日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

你想了解的Cookie和Session就在这~

發布時間:2023/11/28 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你想了解的Cookie和Session就在这~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

      • 1、會話的概念
      • 2、保存會話的兩種技術
      • 3、Cookie
      • 4、Session(重點)

1、會話的概念

我們知道session的意思就是會話,Cookie和Session 是兩種會話技術,我們首先了解一下會話的概念

會話:用戶打開一個瀏覽器,點擊了很多超鏈接,訪問多個web資源,關閉瀏覽器,這個過程可以稱之為會話

有狀態會話:比如你訪問一個網站,下次再次訪問時,這個網站會知道你曾經訪問過,這就是有狀態會話

  • 有狀態會話建立在客戶端服務端

  • 服務端給客戶端一個信件,客戶端下次訪問服務端帶上信件就可以讓服務端知道你來過,這就是cookie

  • 服務器登記你來過了,下次你來的時候對你進行匹配,這就是seesion


2、保存會話的兩種技術

cookie

  • 客戶端技術(服務端通過響應發給客戶端,客戶端通過請求帶到服務器上)

session

  • 服務器技術,利用這個技術可以保存用戶的會話信息,我們可以把信息或者數據放在session中

    常見場景:網站登錄之后,下次就不用再登陸了,第二次直接就登陸了


3、Cookie

流程:

  1. 客戶端向服務端發出請求,服務端從請求中拿到cookie信息
  2. 服務器響應給客戶端相應的cookie

這樣下次登錄的時候,客戶端帶著上次的cookie向服務端發出請求,服務端根據cookie響應出對應的cookie給客戶端,這樣客戶端每次請求都有上次的cookie,就實現了"服務端知道你曾經訪問"

常用方法:

Cookie[] cookies = req.getCookies();//獲得Cookie,這里返回數組,說明Cookie可能存在多個
cookie.getName();//獲得cookie中的key
cookie.getValue();//獲得cookie中的value
new Cookie("LastLoginTime", System.currentTimeMillis() + "");//新建一個Cookie
cookie.setMaxAge(24 * 60 * 60);//設置Cookie的有效期(以s為單位)
resp.addCookie(cookie);//響應給客戶端一個cookie

細節問題:

  • 一個Cookie只能保存一個信息
  • 一個web站點可以給瀏覽器發送多個cookie
  • Cookie大小有限制

怎么刪除Cookie?

  • 不設置有效期,關閉瀏覽器,自動失效;
  • 設置有效期時間為0;

示例cookie01,用來保存用戶上一次訪問的時間:

//保存用戶上一次訪問的時間
public class Cookie01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解決中文亂碼req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");//獲取輸出流PrintWriter out = resp.getWriter();//cookie,服務器端從客戶端獲取Cookie[] cookies = req.getCookies();//這里返回數組,說明Cookie可能存在多個//判斷Cookie是否存在if (cookies != null) {//如果存在out.write("你上一次訪問的時間是:");for (Cookie cookie : cookies) {if (cookie.getName().equals("LastLoginTime")) {//獲取cookie的值Date date = new Date(Long.parseLong(cookie.getValue()));out.write(date.toLocaleString());}}} elseout.write("這是你第一次訪問");//服務器給客戶端相應一個cookieCookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis() + "");//設置cookie的有效期為一天,以秒為單位cookie.setMaxAge(24 * 60 * 60);//服務器將cookie響應給客戶端resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

添加對應的注冊和請求路徑

<servlet><servlet-name>cookie01</servlet-name><servlet-class>com.zsr.servlet.Cookie01</servlet-class>
</servlet>
<servlet-mapping><servlet-name>cookie01</servlet-name><url-pattern>/c1</url-pattern>
</servlet-mapping>

**測試:**我們打開瀏覽器,輸入 http://localhost:8080/c1 ,就可以看到上次訪問的時間,刷新,同樣可以看到上次的訪問時間

接著,我們打開檢查看響應標頭,也可以看到對應設置的信息


對于亂碼問題的處理(encode和decode):

  • URLDecoder.decode(cookie.getValue()   //節碼
    URLEncoder.encode("鐘嗣儒", "utf-8")	//編碼
    
  • 測試樣例(輸入中文測試)

//保存用戶上一次名字
public class Cookie02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解決中文亂碼req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");//獲取輸出流PrintWriter out = resp.getWriter();//cookie,服務器端從客戶端獲取Cookie[] cookies = req.getCookies();//這里返回數組,說明Cookie可能存在多個//判斷Cookie是否存在if (cookies != null) {//如果存在out.write("你上一次訪問名字是:");for (Cookie cookie : cookies) {if (cookie.getName().equals("name")) {//獲取cookie的值out.write(URLDecoder.decode(cookie.getValue(), "utf-8"));}}} elseout.write("這是你第一次訪問");//服務器給客戶端相應一個cookieCookie cookie = new Cookie("name", URLEncoder.encode("鐘嗣儒", "utf-8"));//設置cookie的有效期為一天,以秒為單位cookie.setMaxAge(24 * 60 * 60);resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

4、Session(重點)

關于Session:

  • 服務器會給每一個用戶(每一個瀏覽器)創建一個Session對象;
  • 一個Session獨占一個瀏覽器,只要瀏覽器沒有關閉,這個Session就存在;
  • 示例:用戶登錄之后,整個網站的其他分支他都可以訪問(比如登陸了B站,Session保存用戶的所有信息,用戶的個人中心,投稿頁面等都可以訪問,但如果沒有登錄,則不能訪問)

Session和Cookie的區別:

  • Cookie是把用戶的數據寫給用到的瀏覽器,瀏覽器保存(可以保存多個)
  • Session是把用戶的數據寫到用戶獨占的Session中,服務器端保存(保存重要信息,減少服務器資源浪費)
  • Session由服務器創建

使用場景:

  • 保存一個用戶的登錄信息;
  • 購物車信息;
  • 整個網站中經常會使用的數據,我們把它保存在Session中

Session的常用方法:

案例代碼示例:

  1. Session01(用來向session中存東西)
public class Session01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解決亂碼問題resp.setCharacterEncoding("utf-8");req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf8");//得到SessionHttpSession session = req.getSession();//給Session中存東西session.setAttribute("name", "zsr");//存字符串session.setAttribute("person", new Person("gcc", "2018217876"));//存對象//獲取Session的IDString id = session.getId();//判斷Session是不是新創建的if (session.isNew())resp.getWriter().write("session創建成功,ID為:" + id);elseresp.getWriter().write("session已經在服務器中存在,ID為:" + id);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
  1. Session02(用來得到session里的東西并輸出顯示)
public class Session02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解決亂碼問題resp.setCharacterEncoding("utf-8");req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf8");//得到SessionHttpSession session = req.getSession();//獲取Object name = session.getAttribute("name");//獲取字符串Object p = session.getAttribute("person");//獲取對象System.out.println((String) name);System.out.println(p);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
  1. Session03(用來注銷session)
//注銷
public class Session03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解決亂碼問題resp.setCharacterEncoding("utf-8");req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf8");//得到SessionHttpSession session = req.getSession();//取消掉namesession.removeAttribute("name");//手動注銷sessionsession.invalidate();}
  1. web.xml配置
<!--    Cookie01--><servlet><servlet-name>cookie01</servlet-name><servlet-class>com.zsr.servlet.Cookie01</servlet-class></servlet><servlet-mapping><servlet-name>cookie01</servlet-name><url-pattern>/c1</url-pattern></servlet-mapping><!--    Cookie02--><servlet><servlet-name>cookie02</servlet-name><servlet-class>com.zsr.servlet.Cookie02</servlet-class></servlet><servlet-mapping><servlet-name>cookie02</servlet-name><url-pattern>/c2</url-pattern></servlet-mapping><!--    Session01--><servlet><servlet-name>session01</servlet-name><servlet-class>com.zsr.servlet.Session01</servlet-class></servlet><servlet-mapping><servlet-name>session01</servlet-name><url-pattern>/s1</url-pattern></servlet-mapping><!--    Session02--><servlet><servlet-name>session02</servlet-name><servlet-class>com.zsr.servlet.Session02</servlet-class></servlet><servlet-mapping><servlet-name>session02</servlet-name><url-pattern>/s2</url-pattern></servlet-mapping><!--    Session03--><servlet><servlet-name>session03</servlet-name><servlet-class>com.zsr.servlet.Session03</servlet-class></servlet><servlet-mapping><servlet-name>session03</servlet-name><url-pattern>/s3</url-pattern></servlet-mapping><!--    設置Session默認的失效時間--><session-config><!--15分鐘后,session自動失效,以分鐘為單位--><session-timeout>15</session-timeout></session-config>

測試1:

首先訪問localhost:8080/s1

我們打開檢查,可以發現我們的session的ID(JSESSIONID)在cookie里面

這是問什么呢??Session創建的時候做了什么事情??根據上述結果,我們可以總結做了以下事情

Cookie cookie = new Cookie("JSESSIONID", id);
resp.addCookie(cookie);

測試二:

我們首先走localhost:8080/s1

再走localhost:8080/s2,可以看到控制臺輸出了對應的信息

然后我們再走localhost:8080/s3,注銷了session,再走localhost:8080/s2,可以看到控制臺輸出null,證明注銷了

然后我們再走localhost:8080/s1,可以看到新生成了一個ID,與前面的ID不同,這說明:

session注銷后會立馬生成一個新的session


其中,關于Session注銷有兩種方式

  • 手動注銷:

    session.invalidate();
    
  • 自動注銷:(在web.xml中配置,單位為分鐘)

    <!--    設置Session默認的失效時間-->
    <session-config><!--15分鐘后,session自動失效,以分鐘為單位--><session-timeout>15</session-timeout>
    </session-config>
    

總結

以上是生活随笔為你收集整理的你想了解的Cookie和Session就在这~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。