日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

小白开学Asp.Net Core 《十》

發布時間:2023/12/4 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小白开学Asp.Net Core 《十》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小白開學Asp.Net Core 《十》?

            — — Session、Cookie、Cache(老生常談)

一、背景

  在常談Session和Cookie之前我們先來簡單的了解下Http(可以說這是必須的,默認大家都了解)

  總結一句話:HTTP是一種無狀態的協議,在不采取特殊手段的情況下,HTTP請求是不保留用戶值或應用狀態的信息。

  Session跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。常用的會話跟蹤技術是Cookie與Session。Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務器記錄信息確定用戶身份。

二、Cookie和Session

  1)Cookie

    Cookie意為“甜餅”,是由W3C組織提出,最早由Netscape社區發展的一種機制。目前Cookie已經成為標準,所有的主流瀏覽器如IE、Chrome、Firefox、Opera等都支持Cookie。

    由于HTTP是一種無狀態的協議,服務器單從網絡連接上無從知道客戶身份。怎么辦呢?就給客戶端們頒發一個通行證吧,每人一個,無論誰訪問都必須攜帶自己通行證。這樣服務器就能從通行證上確認客戶身份了。這就是Cookie的工作原理。

    Cookie 存儲所有請求的數據,因為Cookie是隨每個請求發送的,他們的大小應該保持最低限度,大多數瀏覽器Cookie大小限制為 4096 個字節。

    由于Cookie 容易被篡改,因此它們必須由服務器進行驗證。客戶端上的Cookie可能被用戶刪除或者過期。但是 Cookie 通常是客戶端上持久的數據暫留形式。

    Cookie 大多數情況下,僅標識用戶,但不對其進行身份驗證。

  2)Session

    除了使用Cookie,Web應用程序中還經常使用Session來記錄客戶端狀態。Session是服務器端使用的一種記錄客戶端狀態的機制,使用上比Cookie簡單一些,相應的也增加了服務器的存儲壓力。Session技術則是服務端的解決方案,它是通過服務器來保持狀態的。由于Session這個詞匯包含的語義很多,因此需要在這里明確一下 Session的含義。首先,我們通常都會把Session翻譯成會話。

    Session是另一種記錄客戶狀態的機制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務器上。客戶端瀏覽器訪問服務器的時候,服務器把客戶端信息以某種形式記錄在服務器上。這就是Session。客戶端瀏覽器再次訪問時只需要從該Session中查找該客戶的狀態就可以了。

    如果說Cookie機制是通過檢查客戶身上的“通行證”來確定客戶身份的話,那么Session機制就是通過檢查服務器上的“客戶明細表”來確認客戶身份。Session相當于程序在服務器上建立的一份客戶檔案,客戶來訪的時候只需要查詢客戶檔案表就可以了。

三、Cache

  Cache,中文意思是緩存,是用來將頻繁訪問的數據,存儲于用戶本地或者是訪問速度很快的存儲介質上,以便于提高訪問速度及響應時間。

  通過減少生成內容所需的工作,緩存可以顯著提高應用程序的性能和可伸縮性。緩存最適用于不經常更改的數據。緩存生成的數據副本可以比原始源更快地返回。應編寫和測試應用程序,以便永遠不依賴于緩存數據。

  與會話無關

四、Cookie、Session與Cache的簡單總結

  1)、由于Session依賴于客戶端Cookie(SessionID是存放于Cookie中的),因此不支持Cookie的瀏覽器,Session也會丟失,當然可以用Session Url重寫來解決此問題。

  2)、Cookie不建議存放大數據量(如存一個表格數據等),因為Cookie的值在每次Web頁面請求往返的過程中都是要附在Http頭中的,如果太大會占用客戶端與服務器端之間的帶寬,如果多個連接訪問就是N*4KB,當用戶多了,就會成為瓶頸之一。

  3)、Cache也要占用服務器的內存,但是比Session要多一些靈活性,但要注意哪些數據需要緩存,哪些本就不需要緩存。

  4)、針對用Cache替換Session,對于單一系統來說,是完全不需要注意什么的。若是針對單點登錄來說,同一賬號可以訪問幾個系統。或者在同一電腦中在不同的頁面中訪問不同的系統,那在做Cache數據保存時,應該根據不同的系統唯一標識來保存針對不同系統數據的緩存,以達SessionID的作用(當然還有其他實現方案)。否則,對于前面登錄的系統,在Cache中永遠是最后一個系統的緩存數據,當刷新前面系統時,始終展現的是最后一個系統的操作。

  5)、當然,session也可以不以cache的形式進行處理,因為像redis,memacache中有專門針對session共享的解決方案。

5、.Net Core 的入門使用

  1)、Cookie的使用

  請參考《.Net Core使用Cookie》

  2)Session的使用

    (1)在 ConfigureServices 中加入

services.AddSession();

????????????(2)在 Configure 中注入Session服務

app.UseSession();

????????????(3)使用

//加入 HttpContext.Session.SetString("key", "value"); //取值 HttpContext.Session.GetString("key"); //清除 HttpContext.Session.Remove("key");

 ** 這里隨便說一句,通過看源碼可以看到,.Net Core 默認是用分布式Session實現的(內部使用分布式緩存)(這里就不在深入了,有機會在分享,或者加群(695058251)交流)為了證明沒吹牛,貼圖:

  3)Cache

    (1)在ConfigureServices中加入

services.AddMemoryCache();

????????????(2)使用

      ????在Controller中添加構造方法,聲明IMemoryChche請求參數:

[Route("api/[controller]")] [ApiController] public class MemoryTestController : ControllerBase { private IMemoryCache _cache; public MemoryTestController(IMemoryCache memoryCache) { _cache = memoryCache; } //保存數據 public ActionResult<bool> Set() { var userTest = new UserTest { Id = 1, Name = "Aju" }; var key = "key"; _cache.Set(key, userTest); return true; } //獲取數據 [HttpGet] public ActionResult<UserTest> Get() { var key = "key"; var userTest = _cache.Get<UserTest>(key); return userTest; } }

 **?? cache當然是可以設置過期時間的

_cache.Set(key, userTest, new MemoryCacheEntryOptions() // 設置相對過期時間為5分鐘 .SetSlidingExpiration(TimeSpan.FromMinutes(5))); _cache.Set(key, userTest,new MemoryCacheEntryOptions() // 設置絕對過期時間為5分鐘 .SetAbsoluteExpiration(TimeSpan.FromMinutes(5)));

今天就寫到這里,如果有同學在使用layui時起到引導作用就可以說達到本篇寫作的目的了。如果還有其他疑問,可以加群交流。

?至于分布式緩存(也可以到GitHub上去看),有機會再談。

參考文章:

  https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2

  https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/memory?view=aspnetcore-2.2


總結

以上是生活随笔為你收集整理的小白开学Asp.Net Core 《十》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。