標籤:對象 方法 不能 關閉瀏覽器 欄位 設定 private 統計 UI
http無狀態Http協議是無狀態的,不會記得上次和網頁“發生了什麼”(故事《初戀50次》)。
實驗:private 欄位++。server不記的上次給了瀏覽器什麼。否則server的壓力會太大,瀏覽器須要記住這些值,下次再提交server的時候(請在我的寬度基礎上添加10,)就要把上次的值提交給server,讓他想起來。假設要知道上一次的狀態,一個方法是在對瀏覽器響應結束之前將狀態資訊儲存到頁面表單中(實現一下),下次頁面再向server發出請求的時候帶上這些狀態資訊,這樣server就能依據這些狀態資訊還原上次的狀態了,類似於去看病的病曆本。
1、盡量不要這麼幹,client的事情讓client去做。
2、狀態資訊儲存在隱藏欄位中的缺點:加大網站的流量、減少訪問速度、機密資料放到表單中會有資料欺騙等安全性問題。故事:自行列印存摺,由於剩餘金額不是寫到存摺這個隱藏欄位中的,唯一的關聯就是卡號。
要把機密資料放到server。而且差別不同的訪問者的私密地區,那麼就要一個唯一的標識。
通過Url傳遞
兩個頁面之間傳遞資料最好、興許麻煩最少、最簡單的方法就是通過Url傳遞。
長處:簡單,直接。明白知道發給誰,資料不會亂。
缺點:假設多個頁面或者不確定頁面之間要傳那麼就須要每次跳轉都帶著。 多個頁面或者不確定頁面之間要傳那麼就須要每次跳轉都帶著;不保密。
Cookie
假設想自由的傳遞和讀取,用Cookie。
Cookie是和網站相關的,而且每次向server請求的時候除了發送表單參數外,還會將和網站相關的全部Cookie都提交給server,是強制性的。
Cookie也是儲存在瀏覽器端的,並且瀏覽器會在每次請求的時候都會把和這個網站的相關的Cookie提交到server,並且將服務端返回的Cookie更新回資料庫,因此能夠將資訊儲存在Cookie中,然後在server端讀取、改動。
server返回資料除了普通的html資料以外,還會返回改動的Cookie,瀏覽器把拿到的Cookie值更新本地瀏Cookie 覽器的Cookie就能夠。看報文在server端控制Cookie案例,實現記住username的功能
? 設定值的頁面:Response.SetCookie(new HttpCookie("UserName",username));
? 讀取值的頁面:username= Request.Cookies["UserName"].Value;假設不設定Expires那麼生命週期則是關閉瀏覽器則終止,否則“最多”到Expires的時候終止。
Cookie的缺點:
還不能儲存過多資訊,機密資訊不能存。
Cookie無法跨不同的瀏覽器。
Cookie:是能夠被清除。不能把不能丟的資料存到Cookie中;Cookie尺寸有限制,一般就是幾K,幾百K。
Session原理
須要一種“server端的Cookie”:
1、醫生須要一個私人賬本,記錄病人編號和身份的相應關係;
2、為了防止病人依據分配給
他的編號推測前後人的編號,那麼須要一種“非常難推測”Cookie不能儲存機密資料。
假設想儲存據,能夠儲存一個Guid到Cookie中,然後在server中建立一個以Guid為Key,複雜資料為Value全域Dictionary。放到Application中。這 為Value全域Dictionary。放到Application中。這個Guid就是相當於使用者的一個“令牌”
ASP.Net已經內建了Session機制。把上面的範例用ASP.NetSession重寫。普通的HttpHandler要可以操作Session,要實現IRequiresSessionState介面。Cookie是存在client。Session是存在server端,目的是一樣的:儲存和當前client相關的資料(當前網站的不論什麼一個頁面都能取到Session、Cookie)。 Session(會話)有自己主動銷毀機制,假設一段時間內瀏覽器沒有和server發生不論什麼的互動,則Session會定時銷毀。這也就是為什麼一段時間不操作,系統就會自己主動退出。
Session實現登陸。
Application(*)
Application是應用全域對象。被全體共用。操作之前先Lock,操
作完畢後UnLock。
加入一個“全域應用程式類” Global.asax,當應用程式第一個
頁面被訪問的時候Application_Start運行。
舉被非常多書舉爛了的範例“統計訪問人數”,每次server上一個 l 舉被非常多書舉爛了的範例“統計訪問人數”,每次server上一個
內容被訪問的時候Application_BeginRequest會運行就把數量++
。這樣為什麼不好?大並發訪問會很卡!
做網站開發盡量不要用Application,也非常少有須要用它的時候。
總結
幾種資料傳遞的差別和不同用途
? Application:全域資料,不要用
? Url:精準傳遞,用起來麻煩
? 隱藏欄位:不保密
? Cookie:儲存在client,不保密
? Session:儲存在server端,不能放大資料
asp.net 狀態的傳遞和儲存