瀏覽器和伺服器使用
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的時候,伺服器首...