【发布时间】:2011-11-22 13:04:36
【问题描述】:
在我的应用程序中。有一个登录机制,可以保存一个包含刚刚登录用户信息的 cookie
private void CreateCookie(LoginEventArgs args)
{
HttpCookie cookie = new HttpCookie("user");
cookie.Values["name"] = args.User_Name;
cookie.Values["id"] = args.ID;
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
}
在我的母版页加载时,我会检查此 cookie 是否存在:
HttpCookie cookie = Request.Cookies["user"] ;
if( (cookie != null) && (cookie.Value != ""))
{
if (Session["user"] == null)
Login_Passed(this, new LoginEventArgs(cookie.Values["name"].ToString(), int.Parse(cookie.Values["id"])));
}
现在如果我登录(创建一个 cookie),关闭浏览器,然后运行我的应用程序。再次饼干 存在它的值是正确的,并且用户是“自动”登录的。
如果我首先从启动内容页面重定向到不同的内容页面 cookie 值也完好无损,
问题是当我第二次重定向回不同的内容页面时, 母版页加载,进行检查 cookie 存在,但值被删除...
关于为什么会发生这种情况的任何想法?
顺便说一句,我退出的方式可能是导致此问题的原因:
当我注销时,我会创建一个同名的 cookie,它会在 1 天前过期。
private void Remove_Cookie()
{
HttpCookie cookie = new HttpCookie("user");
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
}
在我描述的情况下,我没有正式注销,我只是结束了我的应用程序,所以这不应该 有什么效果。
【问题讨论】:
-
你是否在你的开发者 IIS 上测试这个?
-
我什至不知道那是什么..
-
这就是在 Visual Studio 中调试时运行的 IIS 服务器。因为默认情况下它会向该服务器添加一个随机端口,并且您的 cookie 可能依赖于该 localhost:port 地址,因此请尝试在您的 Web 项目中设置一个固定端口。
-
问题依然存在
-
我认为问题是当我再次重定向时,执行不同的请求并删除最后一个请求的 cookie,有什么想法如何在请求之间保存 cookie?无需在母版页的每个 Page_Load 上重新创建 cookie。