一,cookie技術
cookie是由伺服器端生成,傳送給瀏覽器,瀏覽器會將cookie的key/value儲存到某個目錄下的文字檔案內,下次請求同一**時就傳送該cookie給伺服器前提是瀏覽器設定為啟用cookie。
1,伺服器端向客戶端傳送乙個cookie
1)建立cookie:
cookie cookie = new cookie(string cookiename,string cookievalue);
示例:cookie cookie = new cookie("username","zhangsan");
那麼該cookie會以響應頭的形式傳送給客戶端:
注意:cookie不能儲存中文
void setmaxage(intseconds)
cookie.setmaxage(
int seconds); ---時間秒
注意:如果不設定持久化時間,cookie會儲存在瀏覽器的記憶體中,瀏覽器關閉 cookie資訊銷毀(會話級別的cookie),如果設定持久化時間,cookie資訊會被持久化到瀏覽器的磁碟檔案裡
示例:cookie.setmaxage(10*60);
設定cookie資訊在瀏覽器的磁碟檔案中儲存的時間是10分鐘,過期瀏覽器 自動刪除該cookie資訊
3)設定cookie的攜帶路徑:
void setpath(string path)
cookie的有效路徑指的是cookie允許被訪問的路徑。設定路徑,以及子路徑都被允許訪問。
注意:如果不設定攜帶路徑,那麼該cookie資訊會在訪問產生該cookie的 web資源所在的路徑都攜帶cookie資訊
* 常見設定:cookie.setpath("/")指的是當前tomcat下的所有的web專案都可以訪問這個cookie;
* cookie.setpath("/web"):指的是/web路徑及其子路徑可以訪問這個cookie;
4)向客戶端傳送cookie:
response.addcookie(cookie cookie);
5)刪除客戶端的cookie:
通常情況下,如果瀏覽器中的cookie儲存的太多,我們需要手動清除瀏覽器中的cookie。這是通過客戶端的技術刪除儲存在瀏覽器中的cookie。servlet中沒有專門提供api去刪除cookie。我們可以通過以下方式刪除cookie;
讓cookie消失的幾種方法
1,沒有設定最大存活時間的cookie,瀏覽器關閉後cookie立即消失;
2,使用瀏覽器手動清除cookie;
3,瀏覽器禁用cookie;
4,通過servlet技術將cookie刪除;
2,伺服器端怎麼接受客戶端攜帶的cookie
1)通過request獲得所有的cookie:
cookie cookies = request.getcookies();
2)遍歷cookie陣列,通過cookie的名稱獲得我們想要的cookie
for(cookie cookie : cookies)
}
二、session技術
session是伺服器為每個訪問這個伺服器的客戶端使用者建立的乙個容器。這個容器中儲存的資料能夠在多個request之間實現共享。而且,這個容器只屬於當前這個使用者。
在會話過程中,只有客戶端(瀏覽器)和伺服器兩個角色。所以,session容器標識的不是使用者,而是當前使用者正在使用的瀏覽器。瀏覽器與伺服器交流是通過給伺服器傳送請求實現的,瀏覽器的每次請求中如果都有乙個相同的標記用來標記session。伺服器就能夠識別這個使用者了。
1,獲得session物件
此方法會獲得專屬於當前會話的session物件,如果伺服器端沒有該會話的session 物件會建立乙個新的session返回,如果已經有了屬於該會話的session直接將已有的session返回(實質就是根據jsessionid判斷該客戶端是否在伺服器上已經存在 session了)
2.怎樣向session中訪問資料(session也是乙個域物件)
session也是儲存資料的區域物件,所以session物件也具有如下幾個方法:
void setattribute(string name,object value)將乙個物件與乙個名稱關聯,之後儲存到session中
object getattribute( string name)通過名稱獲取session中的資料
void removeattribute(string name)根據指定名稱刪除session中的資料
string sessionid = session.getid();獲取session的id
session.setattribute(string name,object obj);session.getattribute(string name);
session.removeattribute(string name);
session.getid()
3,session物件的生命週期
建立:第一次執行request.getsession()時建立
後續的request.getsession()只能獲取已建立的session。
銷毀:1)伺服器(非正常)關閉時
如果正常關閉伺服器,session的資訊,會被序列化硬碟中,儲存在tomcat的work\catalina\localhost\web,當tomcat下一次啟動的時候,會把session載入回來。序列化的檔案會被銷毀。
2)session過期/失效(預設30分鐘)
問題:時間的起算點 從何時開始計算30分鐘?
從不操作伺服器端的資源開始計時
可以在工程的web.xml中進行配置
30
手動配置session的存活時間
將session-config這段配置複製到自己專案中的web.xml中。修改存活時間為1,測試生存時間。
3)手動銷毀session
session.invalidate();
//建立session
system.out.println("session1被建立了。session1="+session1); //
手動銷毀session
session1.invalidate();
system.out.println("session1被銷毀了......................."); //
再次獲取session
4)瀏覽器關閉後,session持久化方案
瀏覽器關閉後,jsessionid就消失來,再次訪問的時候又重新建立了乙個新的session物件。這樣,是比較消耗資源的。如何在瀏覽器關閉後,session能夠繼續存在呢?
session之所以重新建立是因為,瀏覽器關閉後jessionid這個cookie消失了。所以,就不能夠在標識這個session了。如果能夠讓cookie不消失(或者存活時間長點)就能夠在很長一段時間內把這個標識傳送給servlet了。此時servlet就能夠找到之前建立的session物件了。
Python中cookie和session的異同點
cookie和session的異同點 共同點 1.cookie和session都是用來儲存資料的 2.cookie和session都可以設定有效時間 不同點 1.cookie是儲存在瀏覽器客戶端,session是儲存在服務端 2.session相對cookie來說更更安全 3.session依賴於c...
Flask中的cookie和session淺知
cookie技術的必要性 cookie的實現原理 cookie時用來將使用者資訊儲存在客戶端的技術,使用者資訊會被存放於客戶端的計算機中。cookie儲存到客戶端之後,當使用者再次通過瀏覽器發起對伺服器的請求的時候,瀏覽器就會自動帶著此 相關的cookie資訊來請求資料庫。而cookie資訊裡面儲存...
HTTP協議之Cookie和Session
http是無狀態協議,那麼服務端如何識別特定的客戶端呢?注 無狀態指http協議自身不對請求和響應之間的通訊狀態進行儲存。對傳送過的請求和響應都不做持久化處理 即不做任何儲存 每次http請求的時候,客戶端都會傳送相應的cookie資訊到服務端。實際上大多數的應用都是用cookie來實現sessio...