全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

Cookie和Session詳解

更新時(shí)間:2018-08-31 來(lái)源:黑馬程序員技術(shù)社區(qū) 瀏覽量:

一、 會(huì)話(huà)技術(shù)概述?
1、 什么是一次會(huì)話(huà)
用戶(hù)打開(kāi)瀏覽器訪(fǎng)問(wèn)某個(gè)網(wǎng)站, 在這個(gè)網(wǎng)站上瀏覽任意頁(yè)面, 訪(fǎng)問(wèn)完成后將瀏覽器關(guān)閉的過(guò)程稱(chēng)為是一次會(huì)話(huà).
2、 學(xué)習(xí)會(huì)話(huà)要解決的問(wèn)題是什么?
會(huì)話(huà)技術(shù)是用于解決, 在會(huì)話(huà)過(guò)程中數(shù)據(jù)的保存問(wèn)題。
3、 常用的會(huì)話(huà)技術(shù)有哪些
Cookie: 將數(shù)據(jù)保存到客戶(hù)端瀏覽器。
Session: 將數(shù)據(jù)保存到服務(wù)器端。



二、 Cookie詳解
1、 Cookie是什么?
Cookie是一個(gè)小信息, 由服務(wù)器寫(xiě)給瀏覽器的并且由瀏覽器來(lái)保存。
客戶(hù)端保存的Cookie信息, 可以再次帶給服務(wù)器。
2、 創(chuàng)建Cookie
Cookie cookie = new Cookie("username", "admin");
//設(shè)置cookie的有效路徑, 將有效路徑設(shè)置為當(dāng)前應(yīng)用, 則訪(fǎng)問(wèn)當(dāng)前應(yīng)用下的所有資源, 瀏覽器都會(huì)帶著它給服務(wù)器。
cookie.setPath(request.getContextPath());
//設(shè)置cookie的有效時(shí)間, 不設(shè)置就是會(huì)話(huà)過(guò)程, cookie存在瀏覽器的內(nèi)存中
cookie.setMaxAge(60 * 60 * 24 * 7);
//將cookie輸出到客戶(hù)端
response.addCookie(cookie);
3、 獲取Cookie
// 獲得瀏覽器帶過(guò)來(lái)的所有的Cookie
Cookie[] cookies = request.getCookies();
4、 Cookie的分類(lèi)
會(huì)話(huà)級(jí)別: 當(dāng)沒(méi)有設(shè)置Cookie的有效時(shí)間, 默認(rèn)就是會(huì)話(huà)級(jí)別的Cookie.關(guān)閉瀏覽器Cookie就會(huì)銷(xiāo)毀.
持久級(jí)別: 通過(guò)設(shè)置Cookie的有效時(shí)間.那么關(guān)閉瀏覽器Cookie還會(huì)存在.
5、 刪除持久級(jí)別的Cookie
//通過(guò)setMaxAge(0), 可以銷(xiāo)毀持久級(jí)別的Cookie。 但前提條件是, Cooike的有效路徑必須一致。
Cookie cookie = new Cookie("username",null);
cookie.setPath(request.getContextPath());
cookie.setMaxAge(0);
response.addCookie(cookie);
三、 Session詳解
1、 Session是什么?
Session是一個(gè)域?qū)ο螅?可以用于保存用戶(hù)數(shù)據(jù)
Session的作用域范圍是一次會(huì)話(huà)
2、 創(chuàng)建Session對(duì)象
服務(wù)器端第一次調(diào)用request.getSession()時(shí)創(chuàng)建session
3、 銷(xiāo)毀Session對(duì)象
Session過(guò)期。
注: 默認(rèn)過(guò)期時(shí)間為30分鐘, 可以通過(guò)配置web.xml修改Session的過(guò)期時(shí)間
例:
<session-config>
<session-timeout>60</session-timeout>
</session-config>
非正常關(guān)閉服務(wù)器。
注: 如果正常關(guān)閉服務(wù)器, session會(huì)序列化到硬盤(pán).當(dāng)服務(wù)器重新啟動(dòng)時(shí), 會(huì)執(zhí)行反序列化。
調(diào)用session.invalidate()方法。
4、 Session的執(zhí)行原理
當(dāng)服務(wù)器端第一次調(diào)用request.getSession()的時(shí)候, 服務(wù)器會(huì)自動(dòng)為其創(chuàng)建一個(gè)Session對(duì)象, 并通過(guò)Cookie技術(shù)將Session的id, 發(fā)送給客戶(hù)端瀏覽
器。 以后客戶(hù)端再請(qǐng)求本應(yīng)用中其他資源的時(shí)候, 會(huì)自動(dòng)將此Cookie攜帶到服務(wù)器端。 這樣, 服務(wù)器端在接到請(qǐng)求時(shí)候, 就會(huì)收到Session的id, 并根據(jù)id在
內(nèi)存中找到之前創(chuàng)建的Session對(duì)象, 提供給請(qǐng)求使用。



作者:黑馬程序員技術(shù)社區(qū)
首發(fā):http://java.itheima.com/

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!