【发布时间】:2012-02-13 01:36:07
【问题描述】:
我要疯了。我可以写一个 cookie,然后再读一遍。但在某些时候,我想更新它所持有的价值。每当我再次获得 cookie 时,我都会获得初始值,而不是更新后的值。下面是我用于写入/更新和读取 cookie 的代码。
private static HttpCookie WriteCookie(Guid siteId, string siteName)
{
var cookie = HttpContext.Current.Request.Cookies.Get("UserSettings");
if(cookie != null) {
cookie.Value = EncryptObject(new UserSettingsModel { SiteID = siteId, SiteName = siteName });
HttpContext.Current.Response.Cookies.Set(cookie);
}else {
cookie = new HttpCookie("UserSettings") { Path = "/", Expires = DateTime.Now.AddDays(1), Value = EncryptObject(new UserSettingsModel { SiteID = siteId, SiteName = siteName }) };
HttpContext.Current.Response.Cookies.Add(cookie);
}
return cookie;
}
public static UserSettingsModel GetUserSettings(string username = null)
{
var cookie = HttpContext.Current.Request.Cookies.Get("UserSettings");
if (cookie == null || string.IsNullOrEmpty(cookie.Value))
{
cookie = ResetUserSettings();
}
var userSettings = DecryptObject<UserSettingsModel>(cookie.Value);
if (userSettings != null)
{
var siteId = userSettings.SiteID;
var siteName = userSettings.SiteName;
return new UserSettingsModel { SiteID = siteId, SiteName = siteName };
}
throw new SecurityException("You have no site attached to your user. Contact an administrtor.");
}
GetUserSettings 始终返回最初创建 cookie 时使用的值。怎么了?
编辑:
我尝试直接从控制器中的方法调用 WriteCookie。 cookie 现在已经设置好了。我通常通过 Ajax 请求调用 WriteCookie。现在,我真的必须使用 JavaScript 编写 cookie,还是我可以使用 WriteCookie 以某种方式完成它?
谢谢!
【问题讨论】:
-
您是否检查了使用 fiddler 实际发送的内容?特别注意到期和路径。
-
我使用的是 Chrome 浏览器,并且使用集成的开发者工具,我可以看到 cookie 值永远不会更新。我想知道为什么
-
查看请求和响应标头以了解发生了什么。
-
据我所知,响应标头中没有 cookie。我可以在请求标头中看到初始 cookie 值
标签: c# asp.net-mvc model-view-controller cookies