era*_*zap 3 c# asp.net cookies
在我的应用程序中 有一个登录机制,用于保存一个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);
}
Run Code Online (Sandbox Code Playgroud)
在我的母版页面加载我执行检查以查看此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"])));
}
Run Code Online (Sandbox Code Playgroud)
现在如果我登录(创建一个cookie),关闭浏览器,然后运行我的应用程序.再次,cookie存在,它的值是正确的,用户"自动"登录.
如果我首先从启动内容页面重定向到不同的内容页面,则cookie值也完好无损,
问题是当我第二次重定向回另一个内容页面时,主页面加载,检查cookie是否存在但是值被删除...
关于为什么会这样的想法?
也许我退出的方式可能是这个问题的原因:
当我注销时,我创建一个与1天前相同名称的cookie.
private void Remove_Cookie()
{
HttpCookie cookie = new HttpCookie("user");
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
}
Run Code Online (Sandbox Code Playgroud)
在iv'e描述我没有正式退出的情况下,我只是结束我的应用程序,所以这不应该有任何影响.
era*_*zap 16
哦,
特别感谢Peter Bromberg ,这个问题是不可想象的
在"消失的Cookie"一文的部分
作者说,如果你在Response.Cookies ["cookie_name"]上有一个监视,浏览器会创建一个新的空cookie来覆盖你的cookie.
我使用了这样的手表,这使我的饼干松散了它的价值,当我把它取下时,饼干保留了它的价值.
道德是不要观察Response.Cookies [""]我还读了一些其他帖子,如果你检查
if( Response.Cookies["cookie_name"] != null )
Run Code Online (Sandbox Code Playgroud)
例如,它也被覆盖.
重申并以已经陈述的内容为基础(是的,我知道这是一个4岁的问题)我发现最好建立一个实用程序来处理这个 - 主要是因为我想经常检查那个特定的cookie.
这不会触及响应,但只能从请求中读取.
public static HttpCookie GetCookie(string cookieName)
{
HttpCookie rqstCookie = HttpContext.Current.Request.Cookies.Get(cookieName);
/*** NOTE: it will not be on the Response!
* this will trigger the error noted in the original question and
* create a new, empty cookie which overrides it
*
HttpCookie respCookie = HttpContext.Current.Response.Cookies.Get(cookieName);
*
*/
if (rqstCookie != null && !String.IsNullOrEmpty(rqstCookie.Value))
{
// is found on the Request
return rqstCookie;
}
else
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
始终从请求中读取并写入响应.
谢谢伊兰!这篇文章正是我所需要的
| 归档时间: |
|
| 查看次数: |
11314 次 |
| 最近记录: |