會話跟蹤Cookie與Session

2022-09-08 19:06:12 字數 3978 閱讀 8987

會話跟蹤用來跟蹤使用者的整個會話,常用的是session和cookie。cookie通過客戶端記錄資訊確定使用者身份,session通過在伺服器端記錄資訊確定使用者身份。

1.cookie

1.1概念及使用方法

cookie實際上是一小段文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發乙個cookie。客戶端瀏覽器會把cookie儲存起來,當瀏覽器再請求該**時,把請求的**連同該cookie一同交給伺服器。伺服器檢查該cookie,以此來辨認使用者狀態。伺服器還可以根據需要修改cookie的內容。

j**a中把cookie封裝成了j**ax.servlet.http.cookie類。每個cookie都是該cookie類的物件。伺服器通過操作coolkie類物件對客戶端cookie進行操作。通過request.getcookie()獲取客戶端提交的所有cookie(cookie),通過response.addcookie(cookie cookie)向客戶端設定cookie。

cookie物件使用key-value屬性對的形式儲存使用者狀態,乙個cookie物件儲存乙個屬性對,乙個request或者response同時使用多個cookie。因為cookie類位於包j**ax.servlet.http.*下面,所以jsp中不需要import該類。

1.2不可跨網域名稱性

根據網域名稱的不同,**只能操作自己的cookie,這是由客戶端瀏覽器決定的。

1.3unicode編碼:儲存中文

使用時可以用如下語句生成cookie  及從cookie中取值

cookie cookie = new cookie(urlencoder.encode("姓名","utf-8"));

string cookiename=urldecoder.decode(cokie.getname()),"utf-8";

//in

byte binary;//輸入流輸入

string content = base64encoder.class.newinstance().encode(binary);

cookie cookie=new cookie("file", content);

//out

byte binary=base64decoder.class.newinstance().decodebuffer(cookie.getvalue(),.replace(" ",""));

response.getoutputstream().write(binary);

1.5cookie的所有屬性1.6cookie的有效期cookie的maxage決定著cookie的有效期,單位為妙。cookie中通過getmaxage()方法與setmaxage(int maxage)方法來讀寫maxage屬性。

如果maxage屬性為正數,則表示該cookie會在maxage秒之後自動失效。瀏覽器會將其寫到對應的cookie檔案中,下面的cookie資訊將永遠有效。

cookie.setmaxage(integer.max_value);
如果maxage為負數,則表示該cookie僅在本瀏覽器視窗以及本視窗開啟的子視窗內有效,關閉視窗後該cookie失效。不會被寫入cookie檔案中。

1.7刪除和修改

如果maxage為0,則表示刪除該cookie。

response物件提供的cookie操作方法只有乙個新增操作add,要想修改cookie只能使用乙個同名的cookie來覆蓋原來的cookie。

1.8cookie的網域名稱

同一一級網域名稱下的二級網域名稱不可互動使用cookie,如果想二級網域名稱下都可以使用該cookie,需要設定cookie的domain引數

1.9cookie的路徑

path屬性決定允許訪問cookie的路徑,path屬性需要使用符號「/」結尾。

1.10j**ascript操作cookie

document.cookie可以獲得本頁面所有的cookie,各cookie之間用分號";"隔開。獲取cookie可以用split函式切cookie字串。

設定cookie可以直接賦值 document.cookie = name + "=" + emcodeuri(value);

2.session

2.1概念及使用方法

客戶端瀏覽器訪問伺服器的時候,伺服器把客戶端資訊以某種形式記錄在伺服器上,客戶端瀏覽器再次訪問時只需要從該session中查詢該客戶的狀態就可以。對應的類為j**ax.servlet.http.httpsession。每個來訪者對應乙個session物件,所有該客戶的狀態資訊都儲存在這個session物件裡。在客戶端第一次請求伺服器時建立。

servlet中必須使用request來程式設計式獲取httpsession物件,而jsp中內建了session隱藏物件,可以直接使用。 request.getsession()方法獲取session,使用getattribute(string key)和setattribute(string key, object value)方法來讀寫客戶狀態資訊。

2.2session的生命週期

session儲存在伺服器記憶體中,每個使用者都會有乙個獨立的session,因此session裡的資訊應該盡量精簡。session生成後,只要使用者繼續訪問,伺服器就會更新session的最後訪問時間,並維護該session。伺服器會把長時間沒有活躍的session從記憶體刪除,session就自動失效。session的超時時間為maxinactiveinterval屬性,可以通過getmaxinativeinterval()獲取,通過setmaxinactiveinterval(long interval)修改。session的超時時間也可以在web.xml檔案中修改,另外通過invalidate()方法可以使session失效。

2.3session的常用方法

2.4session與瀏覽器

http協議是無狀態的,session不能依據http連線來判斷是否是同一客戶,因此伺服器向客戶端瀏覽器傳送乙個名為jsessionid的cookie,它的值為該session的id,session依據該cookie來識別是否為同一使用者。該cookie為伺服器自動生成的,它的maxage屬性一般為-1。同一機器的兩個瀏覽器會生成兩個不同的session,但是由瀏覽器視窗內的鏈結、指令碼等開啟新視窗除外。這類子視窗會共享父視窗的cookie,因此會共享乙個session。

如果瀏覽器禁用cookie或者不支援cookie,就需要用到url位址重寫。

url位址重寫是對客戶端不支援cookie的解決方案。url位址重寫的原理是將該使用者session的id資訊重寫到url位址中。伺服器能夠解析重寫後的url獲取session的id。  

3.cookie與session區別

cookie只能儲存ascii字串,如果需要訪問unicode字元或者二進位制資料,需要進行utf-8,gbk或者base64等方式編碼。cookie也不能直接訪問j**a物件。session可以訪問任何型別的資料。

session不存在敏感資訊洩露的危險,如果選用cookie,敏感資訊盡量不要寫到cookie中。

cookie可以永久有效,session不能實現。

併發瀏覽的使用者非常多時,最好使用cookie。

對於wap應用, session+url位址重寫。

cookie通過設定domain屬性,可以實現跨網域名稱(二級網域名稱),session則不會支援跨網域名稱。

Cookie 會話跟蹤技術

伺服器的請求流程 特點 1.只能使用純文字 2.檔案有大小的限制 4kb 3.數量限制 50條左右 4.讀取有網域名稱的限制,不可跨域讀取 5.有時效性 設定cookie document.cookie name value 1.用等號去間隔cookie的名和值 3.沒有設定過期時間的cookie,...

會話跟蹤技術 cookie

cookie是會話跟蹤技術的一種,是某些 為了辨別使用者身份而在儲存在使用者終端上的身份資訊。cookie cookie newcookie name value response.addcookie cookie 顯然,cookie的建立是通過兩個string型別引數,第乙個表示cookie名,第...

Django之元件 cookie與session

cookie 由伺服器產生,存放在客戶端瀏覽器上的鍵值對。設定值 取值 request.cookies.get key request.cookies key 刪除值 session 儲存在伺服器上的鍵值對。設定值 request.session key value request.session ...