我正在创建包含以下代码行的cookie:
HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires.AddYears(1);
Response.Cookies.Add(userid);
现在,我如何才能使其持久化?
如果我在关闭浏览器后再次访问同一页面,我无法找回它。
发布于 2015-06-26 03:41:24
虽然被接受的答案是正确的,但它没有说明原始代码无法工作的原因。
你问题中的错误代码:
HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires.AddYears(1);
Response.Cookies.Add(userid);
看一下第二行。过期的依据是Expires属性,该属性包含默认值1/1/0001。以上代码的计算结果为1/1/0002。此外,不会将计算结果保存回属性。相反,Expires属性应以当前日期为基础进行设置。
已更正代码:
HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(userid);
发布于 2010-06-29 20:23:05
FWIW在未加密的cookie中存储像userid这样的东西时要非常小心。这样做会使您的站点非常容易受到cookie中毒的影响,用户可以很容易地冒充其他用户。如果您正在考虑这样的事情,我强烈建议您直接使用forms身份验证cookie。
bool persist = true;
var cookie = FormsAuthentication.GetAuthCookie(loginUser.ContactId, persist);
cookie.Expires = DateTime.Now.AddMonths(3);
var ticket = FormsAuthentication.Decrypt(cookie.Value);
var userData = "store any string values you want inside the ticket
extra than user id that will be encrypted"
var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name,
ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData);
cookie.Value = FormsAuthentication.Encrypt(newTicket);
Response.Cookies.Add(cookie);
然后,您可以通过执行以下操作,随时从ASP.NET页面读取此文件
string userId = null;
if (this.Context.User.Identity.IsAuthenticated)
{
userId = this.Context.User.Identity.Name;
}
发布于 2015-11-27 01:08:34
据我所知,您使用ASP.NET身份验证,要设置cookies持久性,您需要设置FormsAuthenticationTicket.IsPersistent = true,这是主要思想。
bool isPersisted = true;
var authTicket = new FormsAuthenticationTicket(
1,
user_name,
DateTime.Now,
DateTime.Now.AddYears(1),//Expiration (you can set it to 1 year)
isPersisted,//THIS IS THE MAIN FLAG
addition_data);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, authTicket );
if (isPersisted)
authCookie.Expires = authTicket.Expiration;
HttpContext.Current.Response.Cookies.Add(authCookie);
https://stackoverflow.com/questions/3140341
复制相似问题