具体代码如下:
web.config文件
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="/login.aspx" timeout="30" path= "/"> </forms>
</authentication>
login.aspx.cs文件
string userRoles = "member"
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddMinutes(30), false, userRoles, "/"); //建立身份验证票对象
string HashTicket = FormsAuthentication.Encrypt(Ticket); //加密序列化验证票为字符串
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);//生成Cookie
//根据选择Cookie的类型得到过期时间,0为不保存,1为保存1天,2为保存1个月,3为保存1年,4为永久保存我设为99年一般足够了
switch (CookieType)
{
case 0:
break;
case 1:
UserCookie.Expires =DateTime.Now.AddDays(1);
break;
case 2:
UserCookie.Expires = DateTime.Now.AddMonths(1);
break;
case 3:
UserCookie.Expires = DateTime.Now.AddYears(1);
break;
case 4:
UserCookie.Expires = DateTime.Now.AddYears(99);
break;
default:
break;
}
//生成Cookie
HttpContext.Current.Response.Cookies.Add(UserCookie); //输出Cookie
HttpContext.Current.Response.Redirect(Context.Request["ReturnUrl"]); // 重定向到用户申请的初始页面
global.asax文件
protected void Application_AuthorizeRequest(object sender, System.EventArgs e)
{
HttpApplication App = (HttpApplication)sender;
HttpContext Ctx = App.Context; //获取本次Http请求相关的HttpContext对象
if (Ctx.Request.IsAuthenticated == true) //验证过的用户才进行role的处理
{
FormsIdentity Id = (FormsIdentity)Ctx.User.Identity;
FormsAuthenticationTicket Ticket = Id.Ticket; //取得身份验证票
string[] Roles = Ticket.UserData.Split(','); //将身份验证票中的role数据转成字符串数组
Ctx.User = new GenericPrincipal(Id, Roles); //将原有的Identity加上角色信息新建一个GenericPrincipal表示当前用户,这样当前用户就拥有了role信息
}
}
举个例子:
我设置的都是保留1年,而且产生的COOKIE文件经过查看,的确是2009年的日期,在30分钟之内,都可以登录,无论我电脑重启、服务器重启都可以登录到后台,但是为什么30分钟以后我在登录就不好使,让我重新输入登录的名称和密码。
暂时知道的原因
Cookie的有效期是一年,但是票据(FormsAuthenticationTicket)的有效期只有30分钟。
30分钟以后,Cookie仍然在在,但是票据已经过期了,所以又要重新输入用户名与密码来登陆了。
怎么设置或者怎么编程让登录信息保存期为1年。1年之内不用登录的麻烦直接进入后台。
非常感谢各位帮忙!
------解决方案--------------------------------------------------------
学习
------解决方案--------------------------------------------------------
支持
------解决方案--------------------------------------------------------
怎么样能设置保存期为1年。1年之内不用登录直接进入后台
-----------------------------------------------
我很想说lz为什么不用cookie,把信息存到用户本地,用MD5加密,CSDN上的2周不用登录功能,就是用Cookie
------解决方案--------------------------------------------------------
对于这段代码,
new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddMinutes(30), false, userRoles, "/");