Cookies+Session保存用户登陆状态

来源:互联网 发布:建筑工程算量软件 编辑:程序博客网 时间:2024/05/22 11:40

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是根据服务器的信息来的,是存放在服务器端的内存中的,当服务器端内存一吃紧在做释放工作之后,用户信息当然会丢失了。


原创粉丝点击