在我们的应用程序中有两种类型的用户,我们称之为用户Alpha
和Beta
用户。这些用户中的每一个都会看到不同类型的工具栏/菜单。
我们已决定使用 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
对象并从对象中读取 cookie Request
。
我遇到的问题是,当我到达加载工具栏的控制器方法时,IsAlpha
和IsBeta
cookies 的值都是空字符串,这会破坏应用程序。
我已经确认 cookie 在Response
被读取之前设置在Request
.
我想知道我是否在这里遗漏了一些基本的东西。