1. 程式人生 > >Cookies+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是根據伺服器的資訊來的,是存放在伺服器端的記憶體中的,當伺服器端記憶體一吃緊在做釋放工作之後,使用者資訊當然會丟失了。