asp.net 狀態的傳遞和儲存

來源:互聯網
上載者:User

標籤:對象   方法   不能   關閉瀏覽器   欄位   設定   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 狀態的傳遞和儲存

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.