web會話狀態維持

2021-08-22 17:44:28 字數 2604 閱讀 5070

[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...