Cookies+Session保存用户登陆状态

长平狐 发布于 2013/01/06 11:24
阅读 496
收藏 0

Cookies+Session保存用户登陆状态

Java    2008-10-17 10:26   阅读345   评论0  
字号:    

最近在一个项目中,之前的验证方式是纯的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是根据服务器的信息来的,是存放在服务器端的内存中的,当服务器端内存一吃紧在做释放工作之后,用户信息当然会丢失了。

 

声明本文转自: http://blog.163.com/lao12qi12345@126/blog/static/117915512008917102643525/


原文链接:http://blog.csdn.net/sunboy_2050/article/details/4958027
加载中
返回顶部
顶部