[url]
什麼人該閱讀本文?
如果你對以下問題感興趣但是又不能確切的回答,你就應該閱讀此文.
1.session是什麼?
2.cookie又是什麼?
3.如果完全禁用了cookies,session還起作用嗎?
4.為什麼有的**登入一次以後就不用再登入?
5.asp中的session是否依賴cookie?
6.jsp中的session是否依賴cookie?
7.asp.net中的session又是怎麼回事?
下面將詳細的講述會話狀態的維持,看完之後你應該可以回答上面的幾個問題了
1.session和cookie的由來
這裡我不區分cookie和cookies,只是乙個複數形式而已.我們都知道http是無狀態的協議,就是說每次請求都是分開的,伺服器根本不知道兩次請求是否是同乙個人,如果我們的內容是完全公開的,也就是所有內容誰都可以看(比如sina的新聞),這種情況呀根本就沒有必要知道兩次請求是不是同乙個.但是大部分情況下我們不希望這樣,我們希望只有會員登入之後才能訪問(所有的論壇幾乎都是這樣).而其他人不允許他們反問,於是便要知道每次請求的是不是同乙個人,這就是會話,也就是乙個session,而且這個session是以cookie為基礎的,cookie最才是網景公司提出的,也叫小甜餅.
伺服器端對每個請求維持乙個會話,並且有乙個唯一的sessionid.如果客戶端沒有禁用cookie的話,客戶第一次請求的時候這個id會寫到客戶端的硬碟上(不相信?看一下資料夾c:\documents and settings\username\local settings\temporary internet files 下的cookie檔案,都是文字檔案).以後你每次請求的時候都會加上這個id值,伺服器端就可以知道是不是同乙個請求了.如果還不相信的話,你可以這樣做個試驗:
1.選擇乙個你要用使用者名稱登入的**(最好是asp的,如論壇).
2.先正常登入一遍,確定可以登入,再把瀏覽器關了)
3.選擇internet選項(ie屬性頁),選擇隱藏選項卡,把設定調到最高,確定.
4.重新開ie,登入你剛才登入過的站點,怎麼登都等不上去的.
2.session和cookie的關係
當前維持會話狀態的途徑有且只有兩種種
第一種:cookie,最常見的,95%以上的會話都是cookie的功勞.
第二種:url重寫,把sessionid附加到url中,jsp實現了但用的不多.
如果你用過session,你可能很奇怪:我們一般都是用session維持會話,這裡怎麼沒有?
答案很簡單:上面兩種都是途徑,session是我們的目的.一句話概括session和cookie的關係:cookie是維持session最常見的一種途徑.
3.cookie的過期和session的超時
你可以自己設定cookie的過期(其實是伺服器替你設定的),如果你設定為用不過期,
以後就都不用再重新登陸了,如果這台機器就你乙個人用完全可以這樣設定,否則
最好不要這樣設定.如果你很長時間沒有反應,就是沒有新的請求,session就有可能
過期,你可能遇到這樣的情況:明明已經登入了,過了一會兒回來卻說我沒有登入
提示重新登入.就是因為session過期了,伺服器可以設定過期的時間.
4.禁用了cookie如何實現會話
如果客戶端完全禁用cookie,將會發生什麼現象:
對於asp,無法跟蹤會話,也就是每個請求都當作新的請求.
對於jsp,可以通過重寫url實現會話,session.encodeurl(string path)
session.encodeurl("index.jsp")=index.jsp;jsessionid=431d980051204fc8dc3
bf75840f7af71
可以看到後面的sessionid並沒有包括在querystring中(在?後面)
對於asp.net 同樣支援重寫url,學習jsp的,不過jsp並不是所有的webserver都支援重寫url
5.querystring和hiddenform
你可能覺得他們也可以維持會話,但是事實上是不可以的,他們只能傳遞引數。不過在asp.net中的伺服器事件模型廣泛了使用了hidden來表示控制項的viewstate(這個也是asp.net比asp,jsp先進的地方,是一種全新的技術)
為什麼他們只能傳遞引數而不能實現會話呢?大致過程是這樣的:
伺服器接收到乙個請求,如果沒有獲得sessionid,就產生乙個新的會話.可能你認為這樣可以保持會話 url?sessionid=234234234234.
這是乙個誤區,因為伺服器已經處在乙個新的會話中了,只不過可以獲得上次會話的id號而已.
6.querystring和hiddenform的區別
querystring是url中問號後面的?querystring.一般瀏覽器都把url限制在255個字元以內所以沒辦法傳遞大量的資料,方法必須為get.hiddenform是表單資料,方法為可以是get或者post(一般用post)
7.誤區
8.題外話
利用cookie攻擊,因為客戶端完全禁用cookie之後,每次請求伺服器都要產生乙個會話.如果會話超時時間是15分鐘的話,我們通過完全禁用cookie的方法在15分鐘內不停的請求讓伺服器產生大量的會話,實行dos攻擊(前提是大量的請求和伺服器不做過濾)
Web會話狀態的維持
web 會話狀態的維持 什麼人該閱讀本文?如果你對以下問題感興趣但是又不能確切的回答,你就應該閱讀此文 1.session是什麼?2.cookie又是什麼?3.如果完全禁用了cookies,session還起作用嗎?4.為什麼有的 登入一次以後就不用再登入?5.asp中的session是否依賴coo...
Session物件 會話維持
session 在計算機中,尤其是在網路應用中,稱為 會話控制 session 物件儲存特定使用者會話所需的屬性及配置資訊。在 requests 中,如果直接利用 get 或 post 等方法的確可以做到模擬網頁的請求,但是這實際上是相當於不同的會話,也就是說相當於你用了兩個瀏覽器開啟了不同的頁面。...
狀態維持在web層 每層都可以Cache
api閘道器的開源解決方案那麼多,為什麼我們卻還要選擇自研?sdk.cn 中國領先的開發者服務平台 技術細節 microservice soa 狀態維持在web層 spring session redis 每層都可以cache spring cache redis 讀寫分離在框架層面實現 mybaf...