具体代码如下: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拷贝出来,发现原来的COOKIE与30分钟以后的COOKIE值不同,我猜想可能是服务器判断客户端的COOKIE,然后就删除了服务器认为是错误的COOKIE文件(经过查看这个文件的确没有了),我需要重新输入名称和密码才能建立一个新的Cookie。可是我设置的保存1年,它为什么保存不住,是不是我缺少什么代码还是哪里有问题。已经搞了几个小时还是不灵,谢谢大家的帮助!
<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拷贝出来,发现原来的COOKIE与30分钟以后的COOKIE值不同,我猜想可能是服务器判断客户端的COOKIE,然后就删除了服务器认为是错误的COOKIE文件(经过查看这个文件的确没有了),我需要重新输入名称和密码才能建立一个新的Cookie。可是我设置的保存1年,它为什么保存不住,是不是我缺少什么代码还是哪里有问题。已经搞了几个小时还是不灵,谢谢大家的帮助!
解决方案 »
- gridview 怎么实现 自建的“总价” = “单价”*“数量”
- 怎么根据需求dropdownlist是否回传?
- 28个常用广告代码演示+下载,网站建设经典收藏!!
- 将程序上传到服务器后产生“将对象引用设置到对象的实例。”的错误
- UPDATE 语句的语法错误????? 在sql server里是正常的在access里就不对了,不懂
- 我一定要找到这道"传值"题的正确答案..............
- 请教各位高手iframe中传值的问题
- ASP.NET的编写方式是什么啊?
- ASP.NET中控制一些服务器的配置文件,Apache、Tomcat等conf文件。
- 如何把word文件存成html文件,注:不是在word中另存为,而是通过某种程序或服务器端程序把文件存在服务器端。
- net能否控制票据打印机,比如像超市那样的点阵打印机
- 首页文章分类排放的问题
经过我逐步调试发现。
在30分钟后重新加载此页之前,原来的COOKIE还存在而且期限是2009年2月18日 0:00,也就是1年以后,但是加载后台管理页面以后,这个COOKIE突然消失了,所以我怀疑,应该是判断客户端的COOKIE值可能有问题,也可能是服务器端SESSION丢失导致的,然后就自动删除了这个COOKIE。我用CSDN这个社区,cookie保存一切正常,但是我自己的系统的确有问题,所以我觉得可能是我服务器端程序或者服务器的设置有问题,暂时不知道。还有一个要说明,我IIS中web园设置为1,是默认的,所以应该与它无关,请大家继续帮助。
30分钟以后,Cookie仍然在在,但是票据已经过期了,所以又要重新输入用户名与密码来登陆了。
30分钟以后,Cookie仍然在在,但是票据已经过期了,所以又要重新输入用户名与密码来登陆了。
===============
正解!session 默认是 30分钟过期。