如何處理ASP .NET Core中的cookie?
譯文
【51CTO.com快譯】cookie是通常用于存儲有關用戶信息的一條數據,存儲在用戶的計算機上。在大多數瀏覽器中,每個cookie都存儲為一個小文件,但在Firefox中,它們一起存儲在一個文件中。 cookie表示為鍵值對,你可以利用鍵來讀取、寫入或刪除cookie。
ASP.NET Core使用cookie來維護會話狀態。包含會話ID的cookie隨每個請求一起發送到客戶端。本文討論了如何處理ASP.NET Core中的cookie。
若要使用本文提供的代碼示例,你應該在系統中安裝Visual Studio 2019。如果還沒有一份,可以在此處下載Visual Studio 2019(https://visualstudio.microsoft.com/downloads/)。
在Visual Studio中創建ASP.NET Core MVC項目
先不妨在Visual Studio 2019中創建一個ASP.NET Core MVC項目。假設系統中已安裝Visual Studio 2019,請按照以下概述的步驟,在Visual Studio中創建一個新的ASP.NET Core MVC項目。
- 啟動Visual Studio IDE。
- 點擊“創建新項目”。
- 在“創建新項目”窗口中,從顯示的模板列表中選擇“ASP.NET Core Web應用程序”。
- 點擊“下一步”。
- 在“配置新項目”窗口中,指定新項目的名稱和位置。
- 可選情況下,選中“將解決方案和項目放在同一個目錄中”復選框。
- 點擊“創建”。
- 在接下來顯示的“創建新的ASP.NET Core Web應用程序”窗口中,從頂部下拉列表中選擇.NET Core作為運行時環境,并選擇ASP.NET Core 2.2(或更高版本)。
- 選擇“Web應用程序(Model-View-Controller)”作為項目模板,以創建新的ASP.NET Core MVC應用程序。
- 確保“啟用Docker支持”和“配置HTTPS”這兩個復選框未勾選,因為我們在這里不會使用這些功能。
- 確保“身份驗證”設置為“不進行身份驗證”,因為我們在這里也不會使用身份驗證。
- 點擊“創建”。
現在,你應該已經準備好在Visual Studio中使用一個新的ASP.NET Core MVC項目。我們將在本文的后續部分使用該項目。
在ASP.NET Core中讀取cookie
你可以從Request.cookies集合讀取cookie。下面的代表片段說明了如何從ASP.NET Core中的Request對象讀取cookie。
- string cookie = Request.Cookies["Key"];
如果你想指定cookie的到期失效時間,可以使用Append方法的重載版本,如下面給出的代碼片段所示。
- CookieOptions option = new CookieOptions();
- option.Expires = DateTime.Now.AddMilliseconds(10);
- Response.Cookies.Append(key, value, option);
cookieOptions類使你可以在創建cookie時指定以下額外屬性:
- 域—用于指定與cookie有關的域
- 到期失效時間—用于指定cookie的到期失效時間
- 路徑—用于指定cookie路徑
- 安全策略—用于指定cookie是否可以通過HTTPS來訪問
- HttpOnly—用于指定cookie是否僅對服務器可用
在ASP.NET Core中寫入cookie
想寫入cookie,你可以利用與Request對象有關的Append方法。以下代碼片段說明了如何做到這一點。
- Response.Cookies.Append(somekey, somevalue);
在ASP.NET Core中刪除cookie
若要刪除cookie,可以使用與Request對象有關的cookies集合的Delete方法。以下代碼片段說明了如何做到這一點。
- Response.Cookies.Delete(somekey);
在ASP.NET Core中訪問HttpContext
在本節中,我們將介紹如何在ASP.NET Core中處理cookie數據。我們需要訪問HttpContext才能訪問Request對象。你可以使用IHttpContextAccessor接口,訪問ASP.NET Core中的HttpContext。HttpContextAccessor類實現該接口。
首先,你應該注冊IHttpContextAccessor用于依賴項注入。以下代碼片段說明了如何在Startup類的ConfigureServices方法中添加類型HttpContextAccessor的單一服務。
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddSingleton
- HttpContextAccessor>();
- //Other code
- }
你可以利用依賴項注入來獲得IHttpContextAccessor實例的引用。這將反過來為你提供HttpContext的引用。
以下代碼片段說明了如何訪問控制器中的IHttpContextAccessor實例。請注意,當你在Visual Studio中創建新的ASP.NET Core MVC項目后,默認情況下將創建HomeController。
- public class HomeController : Controller
- {
- private readonly IHttpContextAccessor _httpContextAccessor;
- public HomeController(IHttpContextAccessor httpContextAccessor)
- {
- this._httpContextAccessor = httpContextAccessor;
- }
- //Write your action methods here
- }
在ASP.NET Core控制器方法中寫入cookie數據
你可以使用以下方法在控制器中寫入cookie數據。
- public IActionResult Write(string key, string value, bool isPersistent)
- {
- CookieOptions options = new CookieOptions();
- if (isPersistent)
- options.Expires = DateTime.Now.AddDays(1);
- else
- options.Expires = DateTime.Now.AddSeconds(10);
- _httpContextAccessor.HttpContext.Response.Cookies.Append
- (key, value, options);
- return View("WriteCookie");
- }
在ASP.NET Core控制器方法中讀取cookie數據
一旦cookie數據成功寫入,可以使用以下方法在控制器中讀取cookie數據。
- public IActionResult Read(string key)
- {
- ViewBag.Data =
- _httpContextAccessor.HttpContext.Request.Cookies[key];
- return View("ReadCookie");
- }
要檢查cookie是否已正確寫入,可以查看Web瀏覽器的cookie緩存。
原文標題:How to work with cookies in ASP.NET Core, 作者:Joydip Kanjilal
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】