Cookies+Session保存用户登陆状态
Cookies+Session保存用户登陆状态 的验证方式是纯的Session方式,虽然设置了超时时间,但是好像登陆状态经常会动不动就丢失,导致客户抱怨不断,今天仔细的考虑了一下,决定采用Cookies跟Session结合的方式来判断用户的登陆状态
代码如下:
1、用户登陆代码
HttpContext.Current.Session.Abandon(); //清空当前所有的Session
HttpCookie Cookies = new HttpCookie("AdminInfo");
Cookies.Expires = DateTime.Now.AddHours(-1); //设置过期时间,即强制删除先前的Cookie
HttpContext.Current.Response.AppendCookie(Cookies);
HttpContext.Current.Session.Add("AdminID", Dt.Rows[0]["ID"].ToString());
HttpContext.Current.Session.Add("AdminName", Dt.Rows[0]["UserName"].ToString());
Cookies = new HttpCookie("AdminInfo");
Cookies.Values["AdminID"] = Dt.Rows[0]["ID"].ToString();
Cookies.Values["AdminName"] = Dt.Rows[0]["UserName"].ToString();
Cookies.Expires = DateTime.Now.AddHours(1);//可不设置或者设置成0(代表在关闭浏览器后,立即失效)
HttpContext.Current.Response.AppendCookie(Cookies);
2、登陆状态判断
if (System.Web.HttpContext.Current.Request.Cookies["AdminInfo"] == null) { //Cookies已经丢失,这里将重定向到登陆页面 } if (System.Web.HttpContext.Current.Session["AdminID"] == null) { System.Web.HttpContext.Current.Session["AdminID"] = System.Web.HttpContext.Current.Request.Cookies["AdminInfo"]["AdminID"].ToString(); } string AdminID=System.Web.HttpContext.Current.Session["AdminID"].ToString(); if (AdminID== "") { //假如用户ID值不存在,跳转到登陆页面 } else { //根据用户ID获取该管理员的相关信息,例如权限值等 HttpContext.Current.Session.RemoveAll(); HttpContext.Current.Session.Timeout = 300; HttpContext.Current.Session["UserName"] =""; }
问题:
1、为什么不全部使用Cookies作为用户登陆信息的保存值?
初步考虑到Cookies值有大小的限制,有些属性也不应该作为Cookies存放到客户端,这里最好对Cookies进行一个加密的操作,保证数据的安全。
2、Session为何即使设计了20分钟,但往往会马上就过期了?
初步估计是因为Session是根据服务器的信息来的,是存放在服务器端的内存中的,当服务器端内存一吃紧在做释放工作之后,用户信息当然会丢失了。
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2015-11-27 18:34:53
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!