cookie和session 會(huì)話技術(shù)(重要) ##
1.會(huì)話:概念:先打開一個(gè)瀏覽器,瀏覽器的網(wǎng)頁(資源,包含多次請(qǐng)求和響應(yīng))它碎,關(guān)閉整個(gè)瀏覽器,這個(gè)過程稱為一次會(huì)話。
2.作用:通過cookie和session技術(shù)來保存用戶相關(guān)的一些數(shù)據(jù)扳肛。
cookie的技術(shù)
理解cookie原理(理解)
1.cookie的原理:Cookie是客戶端技術(shù)傻挂,程序把每個(gè)用戶的數(shù)據(jù)以cookie的形式寫給用戶各自的瀏覽器。當(dāng)用戶使用瀏覽器再去訪問服務(wù)器中的web資源時(shí)挖息,就會(huì)帶著各自的數(shù)據(jù)去金拒。這樣,web資源處理的就是用戶各自的數(shù)據(jù)了套腹。
2.看圖
cookie對(duì)象的api
1.Cookie(String name, String value)? ? ? ? cookie的構(gòu)造方法:? ?
2.String getName()? ? ? ? ? ? ? ? ? ? ? ? ? 獲取cookie的名稱
3.String getValue()? ? ? ? ? ? ? ? ? ? ? ? 獲取cookie的值
4.void setValue(String newValue)? ? ? ? ? ? 設(shè)置cookie的值
5.void addCookie(Cookie cookie)? ? ? ? ? ? 在服務(wù)器端把cookie保存到客戶端
6.Cookie[] getCookies()? ? ? ? ? ? ? ? ? ? 從客戶端獲取cookie的數(shù)組
顯示用戶上次訪問的時(shí)間(和Cookie的原理)?/** * 1.先判斷是否是第一次訪問绪抛?因?yàn)椋旱谝淮卧L問和第n次處理的業(yè)務(wù)是不同的。 * 2.如果是第一次訪問:先輸出一句歡迎电禀,記錄當(dāng)前的時(shí)間幢码,保存到cookie中,回寫到瀏覽器端尖飞。 * 3.如果不是第一次訪問症副,獲取cookie中的值(就是你上次的訪問的時(shí)間),把時(shí)間輸出到頁面上政基。記錄當(dāng)前的時(shí)間贞铣,保存到cookie中∫该矗回寫到瀏覽器端咕娄。 */
* 代碼
cookie的api(另外)
* 演示的效果:直接關(guān)閉瀏覽器,cookie沒有了珊擂,再訪問是最新的圣勒。
* 默認(rèn)的cookie:默認(rèn)保存瀏覽器端。
* 持久的cookie:通過setMaxAge()方法摧扇,把cookie保存到本地的磁盤上圣贸。
* 注意:需求:假如編寫保存用戶名的代碼,默認(rèn)保存7天扛稽。到第5天吁峻,不想保存了,清除cookie在张。
* 刪除保存本地磁盤上的cookie用含。setMaxAge(0); 但是前提條件:如果在之前的代碼中設(shè)置有效路徑的話,你在設(shè)置setMaxAge(0)之前必須先設(shè)置有效路徑一次帮匾。
1.void setMaxAge(int expiry)? ? ? ? ? ? ? ? 設(shè)置cookie的有效時(shí)間(單位是秒)
2.void setPath(String uri)? ? ? ? ? ? ? ? ? 設(shè)置cookie的有效路徑
? ? * 有效路徑:訪問WEB其他資源的時(shí)候是否攜帶cookie內(nèi)容啄骇。
? ? * 不設(shè)置有效路徑:說明我程序默認(rèn)的有效路徑。 /day11?
? ? * 由誰決定:LastTimeServlet訪問路徑是http://localhost/day11/lasttime
? ? * 訪問WEB資源下的jsp/demo1.jsp的時(shí)候:http://localhost/day11/jsp/demo1.jsp瘟斜。攜帶了cookie的內(nèi)容缸夹。
? ? * 總結(jié):只要是訪問/day11下面的其他資源痪寻,默認(rèn)攜帶cookie的內(nèi)容。
? ? * 把LastTimeServlet的訪問路徑修改了 /servlet/lasttime
? ? * 默認(rèn)的有效路徑已經(jīng)改變了 /day11/servlet
? ? * 訪問WEB資源下的jsp/demo1.jsp的時(shí)候:http://localhost/day11/jsp/demo1.jsp虽惭。不攜帶了cookie的內(nèi)容橡类。
? ? * 不想讓它有默認(rèn)的有效路徑,通過setPath來進(jìn)行設(shè)置
3.void setDomain(String pattern)? ? ? ? ? ? 設(shè)置cookie的有效域名
? ? * 設(shè)置域名? cookie.setDomain(".sina.com.cn");
? ? * 訪問域名其他的內(nèi)容是否攜帶cooikie
? ? ? ? * www.sina.com.cn
? ? ? ? * sports.sina.com.cn
? ? ? ? * xxxx.sina.com.cn
商品的瀏覽記錄
/**
* 0.獲取傳過來id值
* 1.判斷是否是第一次訪問芽唇?(獲取指定名稱的cookie如果為null顾画,說明是第一次訪問)
*? ? ? * 如果是第一次訪問,把商品的id保存到cookie中披摄,回寫cookie亲雪。
*? ? ? * 如果不是第一次訪問
*? ? ? ? ? * 先獲取cookie中的內(nèi)容,進(jìn)行判斷(判斷cookie中是否包含當(dāng)前點(diǎn)擊的商品)
*? ? ? ? ? ? ? * 如果cookie中已經(jīng)包含了該商品疚膊,那么就不用處理了
*? ? ? ? ? ? ? * 如果不包含义辕,在cookie中追加該商品? product=1? product=1,2
* 2.重定向商品的列表頁面
* 3.需要在商品的列表頁面中獲取cookie的中內(nèi)容,把內(nèi)容顯示到頁面上寓盗。
*/
seesion的原理
* 看圖灌砖。
session對(duì)象的api
* 獲取session對(duì)象? HttpSession request.getSession() 第一次執(zhí)行,在服務(wù)器的內(nèi)部創(chuàng)建一個(gè)獨(dú)享的session傀蚌。如果是第二次執(zhí)行基显,要是有鑰匙的情況,不會(huì)創(chuàng)建新的session善炫。?
* ServletContext:代表整個(gè)WEB應(yīng)用撩幽。
* session又是一個(gè)域?qū)ο蟆R淮螘?huì)話的范圍箩艺。(在一次會(huì)話的過程中窜醉,可以有多次請(qǐng)求和響應(yīng),只要是瀏覽器不關(guān)閉艺谆,一直有效)
* request域?qū)ο笳ザ瑁淮握?qǐng)求。
* Object getAttribute(String name)? ? ? ? ? ? ? ? ? 獲取域?qū)ο蟮膶傩灾?/p>
* void setAttribute(String name, Object value)? ? ? 設(shè)置域?qū)ο笾械膶傩灾?/p>
* void removeAttribute(String name)? ? ? ? ? ? ? ? 刪除域?qū)ο笾械膶傩灾?/p>
* String getId()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 獲取session? id的值
* void invalidate()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 手動(dòng)的銷毀(用戶退出)
簡單的購物車
* 購物車(商品的名稱和數(shù)量) 對(duì)象? 就使用Map cart 當(dāng)前購物車了静汤。有多次請(qǐng)求和響應(yīng)琅催,cart一直有,把cart存入到session中虫给。
session的追蹤(了解)
* session的追蹤的技術(shù)藤抡。禁用了瀏覽器的cookie中。通過session回寫的cookie的鑰匙沒有了抹估。
* 服務(wù)器內(nèi)部的session還是有的杰捂。如果你要是給我一把鑰匙。
* 可以使用一些方法棋蚌,在請(qǐng)求的后面拼接jsessionid 證明:session在服務(wù)器磁盤上嫁佳,沒有被銷毀。
session域?qū)ο?/b>
* 域?qū)ο螅河脕韨鬟f數(shù)據(jù)谷暮。
* ServletContext:代表整個(gè)WEB應(yīng)用蒿往。
* session又是一個(gè)域?qū)ο蟆R淮螘?huì)話的范圍湿弦。(在一次會(huì)話的過程中瓤漏,可以有多次請(qǐng)求和響應(yīng),只要是瀏覽器不關(guān)閉颊埃,一直有效)
* request域?qū)ο笫叱洌淮握?qǐng)求。
session的創(chuàng)建和銷毀
* session什么時(shí)候創(chuàng)建呢班利?第一次訪問的時(shí)候饥漫,調(diào)用request.getSession(),因?yàn)闆]有session的id罗标。
* session的銷毀
? ? * 非正常原因關(guān)閉服務(wù)器
? ? * session默認(rèn)銷毀時(shí)間 30分鐘? ? 在tomcat/conf/web.xml 有一段配置
? ? * void invalidate()? ? 手動(dòng)的銷毀session(用戶推出)