在我們的應用程序中有兩種類型的用戶,我們稱它們爲Alpha
和Beta
用戶。每個用戶都會看到不同類型的工具欄/菜單。Cookie持久性和最佳實踐
我們已決定使用cookie跟蹤此情況。我們的大部分頁面要麼是Alpha
頁,要麼是Beta
頁,然後有一些共同的頁面,Alpha
和Beta
用戶共享。因此,在我們的應用程序的每個視圖,我們知道用戶類型(Alpha
或Beta
),我們有以下代碼:
HttpCookie isAlphaCookie = new HttpCookie("IsAlpha", "false"); // or true
HttpCookie isBetaCookie = new HttpCookie("IsBeta", "true"); // or false
isAlphaCookie.Expires = DateTime.MaxValue;
isBetaCookie.Expires = DateTime.MaxValue;
Response.Cookies.Add(isAlphaCookie);
Response.Cookies.Add(isBetaCookie);
的想法,然後,在普通的網頁,我們不會設置任何cookie,並依靠之前設置的cookie來確定要加載的工具欄。所以,這兩個Cookie設置爲在我們已知的網頁true
或以上false
之前,我們在其中加載的意見,像這樣的控制器方法閱讀:
HeaderViewModel header = new HeaderViewModel
{
FirstName = UserProfile.CurrentUser.FirstName,
LastName = UserProfile.CurrentUser.LastName,
ImageUrl = null,
OrganisationName = UserProfile.CurrentUser.OrganisationName,
OrganisationUrl = UserProfile.CurrentUser.OrganisationUrl,
ShowAlphaToolbar = bool.Parse(Request.Cookies["IsAlpha"].Value),
ShowBetaToolbar = bool.Parse(Request.Cookies["IsBeta"].Value),
ShowPublicToolbar = false
};
return PartialView("Common/_Header", header);
從如何讀讀書上/寫的cookies似乎是正確的方法;將cookie寫入Response
對象並從Request
對象讀取cookie。
我遇到的問題是,當我到達加載工具欄的控制器方法時,IsAlpha
和IsBeta
cookie的值都是空字符串,這會中斷應用程序。
我已確認在Request
中讀取它們之前,它們設置在Response
中。
我在想我是否在這裏失去了一些基本的東西。
嘗試使用一些瀏覽器工具或小提琴手,看看餅乾真的被存儲在瀏覽器和請求期間發送回服務器。 – mbeckish
你如何稱呼包含工具欄的部分操作?通過ajax或通過@ Html.RenderAction()? – Ankit
檢查設置到cookie中的'ExpiryDate'。 –