無狀態http和常用狀態保持方式

2022-03-28 20:03:19 字數 3421 閱讀 5903

瀏覽器和伺服器使用

socket通訊,伺服器把請求結果返回到瀏覽器後,

socket

連線就會關閉,伺服器會在處理頁面完畢後銷毀頁面物件。當瀏覽器再次和伺服器進行通訊時,伺服器已經不記得上次是怎麼處理網頁的請求的。

當使用者輸入一些資訊,想要跳轉到下乙個頁面的時候,資料就會丟掉,再也獲取不了那些資料了。因此我們需要記錄上一次的狀態資訊。

常用的資訊儲存方式有四種:

作用於整個執行期的狀態物件

)1.使用

物件儲存資訊:

")=值    或    名稱"

,值)物件資訊:

名稱")  

或  鍵名

")物件的值:",值

)刪除乙個鍵:",值

)刪除所有鍵

2.可以再給定的應用程式之間共享資訊,這樣就有可能出現多個使用者同     

物件,造成資料的不一致。

類提供兩種方 

法lock

和unlock,

以解決訪問同步的問題,一次只允許乙個執行緒訪問應用   

程式狀態變數。

例如:名稱

")=值

;      

可用於**訪問人數,聊天室等裝置。

二、將頁面資訊儲存在viewstate

中,其實就是在頁面上的乙個隱藏域中儲存客戶端資訊。

(1)使用者使用

viewstate

儲存方式:

viewstate["key"]="haha";

讀取資料的方式:

string str;

if(viewstate["key"]!=null)

注意:viewstate

不能儲存所有的資料型別,但支援可序列化物件。

非單值伺服器控制項的狀態也能儲存在viewstate

中。當頁面上有乙個伺服器端窗體標記

時才可以使用   

viewstate;

服務端接收到頁面的請求,會檢視請求報文中是否含有—viewstate,

隱藏  

域,如果有,將中間的值解碼後新增到頁面的viewstate

屬性中viewstate適用於同乙個頁面在不關閉的情況下多次與伺服器互動。

禁用viewstate

的方法:

禁用單個控制項將控制項屬性enableviewstate=false.

禁用整個頁面的viewstate,

在aspx

的page

指令區加上

enableviewstate="false"

webform的

ispostback

依賴於_viewstate

三、cookie

:使用的場景就是可以再瀏覽器端記住使用者訪問過的狀態。     

瀏覽器儲存cookie

有兩種方式:

1—瀏覽器的記憶體中;

2—瀏覽器所在的電腦的硬碟中。為將要寫入到瀏覽器的

cookie

物件設定失效時間

cook.expires = datetime.now.addminutes(5);//設定

cook5

分鐘後失效

瀏覽器發來的cookie

的expires

屬性值是無效的

.(瀏覽器在向伺服器傳送

cookie 

的時候,沒有將cookie

的失效時間傳送過去

)伺服器設定cookie

「鍵」,

」值」)

cok.expires = datetime.now.adddays(18);//設定失效日期

-現在之後的

18天後

context.response.cookies.add(cok); //新增到響應中

伺服器獲得客戶端傳來的cookie

:string struname=context.request.cookies[「

uid」

].value;//

從請求中獲得

cookie

response.cookies["username"].expire=datetime.now.adddays(-1);就是把當前的   

cookie刪除了。

cookie原理:普通

get請求,是沒有

cookie

(可以用

工具檢視)服    

務器通過響應報文頭里的setcookie

向瀏覽器設定

cookie

資訊,瀏覽器通過請求  

報文頭 裡的cookie

傳遞瀏覽器儲存的

cookie

資訊四.

session:提供了一種把資訊儲存在伺服器記憶體中的一種方式。它可以儲存任何資料類   

型還包括自定義物件。

每個客戶端的session

是獨立儲存的,它用於儲存有關使用者的資訊,在整個會話中,   

都會保留這個資訊,當使用者在應用程式中從乙個網頁瀏覽到另乙個網頁時,session

仍  然可以維持保留使用者的這個資訊。session

只可由該會話的使用者訪問,它以帶有

sessionid的

cookie

方式儲存在訪問者的瀏覽器端了,當會話過期或終止時,伺服器就  

會清除session

物件。常用語儲存登入使用者id。

1)將新的項新增到會話狀態中

語法格式為:

session (「

鍵名」) = 值或者

session.add( 「

鍵名」 , 值) 

2)按名稱獲取會話狀態中的值

語法格式為:

變數= session (「

鍵名」) 

或者變數

= session.item(「

鍵名」) 

3)刪除會話狀態集合中的項

語法格式為:

session.remove(「

鍵名」) 

4)清除會話狀態中的所有值

語法格式為:

session.removeall() 

或者session.clear() 

5)取消當前會話

語法格式為:

session.abandon() 

6)設定會話狀態的超時期限,以分鐘為單位。

語法格式為:

session.timeout = 

數值global.asax

檔案中有

2個事件應用於

session

物件session_start

:在會話啟動時激發

session_end

:在會話結束時激發

HTTP協議 無狀態

blog 個人 目錄cookie和session http是一種不儲存狀態,即無狀態 stateless 協議。http協議自身不對請求和響應之間的通訊狀態進行儲存。也就是說在http這個級別,協議對於傳送過的請求或響應都不做持久化處理。可以理解為,瀏覽器傳送請求給伺服器時,伺服器響應請求 但同乙個...

HTTP無狀態協議詳解

概述 http協議是無狀態的。無狀態是指協議對於事務處理沒有記憶能力,這意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。無狀態的根本原因是 瀏覽器與伺服器是使用socket套接字進行通訊的,伺服器將請求結果返回給瀏覽器之後,會關閉當前的socket連線,而且伺服...

解決HTTP的無狀態問題

1 通過cookies儲存狀態資訊 client 請求1 響應1 set cookie 請求2 cookie server 通過cookies,伺服器就可以清楚的知道請求2和請求1來自同乙個客戶端。2 通過session儲存狀態資訊 當程式需要為某個客戶端的請求建立乙個session的時候,伺服器首...