生活随笔
收集整理的這篇文章主要介紹了
JavaWeb(七)——Cookie、Session
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 會話
- 2. 保存會話的兩種技術
- 3. Cookie
- 4. Session(重點)
1. 會話
會話:用戶打開一個瀏覽器,點擊了很多超鏈接,訪問多個web資源,關閉瀏覽器,這個過程可以稱之為會話;
有狀態會話:一個同學來過教室,下次再來教室,我們會知道這個同學,曾經來過,稱之為有狀態會話;
一個網站,怎么證明你來過?
客戶端——服務端
- 服務端給客戶端一個 信件,客戶端下次訪問服務端帶上信件就可以了; cookie
- 服務器登記你來過了,下次你來的時候我來匹配你; seesion
2. 保存會話的兩種技術
cookie
session
- 服務器技術,利用這個技術,可以保存用戶的會話信息, 我們可以把信息或者數據放在Session中!
常見:網站登錄之后,你下次不用再登錄了,第二次訪問直接就上去了!
舉例詳細說明:
3. Cookie
(1)從請求中拿到cookie信息
(2)服務器響應給客戶端cookie
Cookie
[] cookies
= req
.getCookies();
cookie
.getName();
cookie
.getValue();
new Cookie("lastLoginTime", System
.currentTimeMillis()+"");
cookie
.setMaxAge(24*60*60);
resp
.addCookie(cookie
);
cookie:一般會保存在本地的 用戶目錄下 appdata;
一個網站cookie是否存在上限!聊聊細節問題
- 一個Cookie只能保存一個信息;
- 一個web站點可以給瀏覽器發送多個cookie,最多存放20個cookie;
- Cookie大小有限制4kb;
- 300個cookie瀏覽器上限
刪除Cookie:
- 不設置有效期,關閉瀏覽器,自動失效;
- 設置有效期時間為 0 ;
編碼解碼:
URLEncoder.encode(“帥幣”,“utf-8”)
URLDecoder.decode(cookie.getValue(),“UTF-8”)
案例測試:
- 在java包下創建一個名為CookieDemo01文件
package com
.zz
.servlet
;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
;
import java
.util
.Date
;
public class CookieDemo01 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
[] cookies
= req
.getCookies(); if (cookies
!=null
){out
.write("你上一次訪問的時間是:");for (int i
= 0; i
< cookies
.length
; i
++) {Cookie cookie
= cookies
[i
];if (cookie
.getName().equals("lastLoginTime")){long lastLoginTime
= Long
.parseLong(cookie
.getValue());Date date
= new Date(lastLoginTime
);out
.write(date
.toLocaleString());}}}else {out
.write("這是您第一次訪問本站");}Cookie cookie
= new Cookie("lastLoginTime", System
.currentTimeMillis()+"");cookie
.setMaxAge(24*60*60);resp
.addCookie(cookie
);}@Overrideprotected void doPost(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{doGet(req
, resp
);}
}
<servlet><servlet
-name
>CookieDemo01
</servlet
-name
><servlet
-class>com
.zz
.servlet
.CookieDemo01
</servlet
-class></servlet
><servlet
-mapping
><servlet
-name
>CookieDemo01
</servlet
-name
><url
-pattern
>/c1
</url
-pattern
></servlet
-mapping
>
4. Session(重點)
什么是Session:
- 服務器會給每一個用戶(瀏覽器)創建一個Seesion對象;
- 一個Seesion獨占一個瀏覽器,只要瀏覽器沒有關閉,這個Session就存在;
- 用戶登錄之后,整個網站它都可以訪問!–> 保存用戶的信息;保存購物車的信息……
Session和cookie的區別:
- Cookie是把用戶的數據寫給用戶的瀏覽器,瀏覽器保存 (可以保存多個);
- Session把用戶的數據寫到用戶獨占Session中,服務器端保存 (保存重要的信息,減少服務器資源的浪費);
- Session對象由服務器創建。
使用場景:
- 保存一個登錄用戶的信息;
- 購物車信息;
- 在整個網站中經常會使用的數據,我們將它保存在Session中。
Session創建的時候做了如下事情:
- Cookie cookie = new Cookie(“JSESSIONID”,sessionId); //創建cookie
- resp.addCookie(cookie); //把cookie響應回去
(1)創建Session:
session.setAttribute("name",new Person("帥幣",17));
- 在java包下創建一個名為SessionDemo01文件:
package com
.zz
.servlet
;import com
.zz
.pojo
.Person
;import javax
.servlet
.ServletException
;
import javax
.servlet
.http
.*
;
import java
.io
.IOException
;public class SessionDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{req
.setCharacterEncoding("UTF-8");resp
.setCharacterEncoding("UTF-8");resp
.setContentType("text/html;charset=utf-8");HttpSession session
= req
.getSession();session
.setAttribute("name",new Person("帥幣",17));String sessionId
= session
.getId();if (session
.isNew()){resp
.getWriter().write("session創建成功,ID:"+sessionId
);}else {resp
.getWriter().write("session已經在服務器中存在了,ID:"+sessionId
);}}@Overrideprotected void doPost(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{doGet(req
, resp
);}
}
<servlet><servlet
-name
>SessionDemo01
</servlet
-name
><servlet
-class>com
.zz
.servlet
.SessionDemo01
</servlet
-class></servlet
><servlet
-mapping
><servlet
-name
>SessionDemo01
</servlet
-name
><url
-pattern
>/s1
</url
-pattern
></servlet
-mapping
>
package com
.zz
.servlet
;import com
.zz
.pojo
.Person
;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
;public class SessionDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{req
.setCharacterEncoding("UTF-8");resp
.setCharacterEncoding("UTF-8");resp
.setContentType("text/html;charset=utf-8");HttpSession session
= req
.getSession();Person person
= (Person
) session
.getAttribute("name");System
.out
.println(person
.toString());}@Overrideprotected void doPost(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{doGet(req
, resp
);}
}
<servlet><servlet
-name
>SessionDemo02
</servlet
-name
><servlet
-class>com
.zz
.servlet
.SessionDemo02
</servlet
-class></servlet
><servlet
-mapping
><servlet
-name
>SessionDemo02
</servlet
-name
><url
-pattern
>/s2
</url
-pattern
></servlet
-mapping
>
- 在java文件下創建一個實體類 pojo
Person里的代碼為:
package com
.zz
.pojo
;public class Person {private String name
;private int age
;public Person() {}public Person(String name
, int age
) {this.name
= name
;this.age
= age
;}public String
getName() {return name
;}public void setName(String name
) {this.name
= name
;}public int getAge() {return age
;}public void setAge(int age
) {this.age
= age
;}@Overridepublic String
toString() {return "Person{" +"name='" + name
+ '\'' +", age=" + age
+'}';}
}
(3)手動注銷Session
session.invalidate();
- 在java包下創建一個名為SessionDemo03文件:
package com
.zz
.servlet
;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
;public class SessionDemo03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{HttpSession session
= req
.getSession();session
.removeAttribute("name");session
.invalidate();}@Overrideprotected void doPost(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{doGet(req
, resp
);}
}
<servlet><servlet
-name
>SessionDemo03
</servlet
-name
><servlet
-class>com
.zz
.servlet
.SessionDemo03
</servlet
-class></servlet
><servlet
-mapping
><servlet
-name
>SessionDemo03
</servlet
-name
><url
-pattern
>/s3
</url
-pattern
></servlet
-mapping
>
不手動注銷的話,可在web.xml配置中設置會話自動過期時間:
<!--設置Session默認的失效時間
-->
<session
-config
><!--15分鐘后Session自動失效,以分鐘為單位
--><session
-timeout
>15</session
-timeout
>
</session
-config
>
總結
以上是生活随笔為你收集整理的JavaWeb(七)——Cookie、Session的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。