asp.net中session的原理及應用

Session簡介丶特性javascript


1.Session是一種Web會話中的經常使用狀態之一。java

2.Session提供了一種把信息保存在服務器內存中的方式。他能儲存任何數據類型,包含自定義對象。jquery

3.每一個客戶端的Seesion是獨立存儲的。web

4.在整個會話過程當中,只要SessionID的cookie不丟失,都會保存Session信息的。瀏覽器

5.Session不能跨進程訪問,只能由該會話的用戶訪問。應爲提取Session數據的id標識是以Cookie的方式保存到訪問者瀏覽器的緩存裏的。緩存

6.當會話終止,或過時時,服務器就清除Session對象。服務器

7.Session經常使用於保存登陸用戶的ID.cookie

8.Session保存的數據是跨頁面全局型的。session


Session的使用函數


這裏我寫入一個例子,便於下面闡述。

 

複製代碼

<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        function getSessionClick(action) {   //這個函數是爲了知道哪個提交按鈕被點擊            $("#hidlgc").val("");  //清空隱藏值            $("#hidlgc").val(action);   //給隱藏控件賦值        }    </script></head><body>
    <form id="form1" method="post" action="MySession.aspx">
         <table>
            <tr>
                <td>帳號:</td><td><input type="text" name="txtUid" /></td>`            </tr>
             <tr>
                <td>密碼:</td><td><input type="password" name="txtPwd" /></td>
             </tr>
             <tr>                
                <td colspan="2">
                    <input type="hidden" value="" id="hidlgc" name="hidlgclick" />  
                    <input onclick="getSessionClick('lgclick')" type="submit" value="登陸" />
                    <input type="submit" onclick="getSessionClick('getSession')" value="獲取session" />
                    <input type="submit" onclick="getSessionClick('backLg')" value="退出登陸" />
                </td>
             </tr>
         </table>
    </form></body>

複製代碼

 

複製代碼

protected void Page_Load(object sender, EventArgs e)
        {            //把用戶id寫入session中
            if (Request.Form["hidlgclick"] == "lgclick")
            {                if(Request.Form["txtUid"].ToString()=="admin"&&Request.Form["txtUid"].ToString()=="admin") //判斷用戶登陸                {
                    Session["userName"] = Request.Form["txtUid"].ToString();  //把用戶id保存到session中
                    Response.Write(Session["userName"].ToString()+"---點擊登陸"); //獲取session,並寫入頁面                }
            }            //獲取Session
            if (Request.Form["hidlgclick"] == "getSession")
            {                if (Session["userName"] != null)
                {
                    Response.Write(Session["userName"].ToString() + "---點擊獲取session"); //獲取session,並寫入頁面                }
            }            //取消當前會話,至關於註銷(退出登陸)。
            if (Request.Form["hidlgclick"] == "backLg")
            {
                Session.Abandon();
            }
        }

複製代碼

  <system.web>
    <sessionState timeout="40"></sessionState>  <!---設置session的過時時間,時間以分鐘爲單位-->


Session原理(根據上面例子闡述)


 

1、session是怎麼存儲,提取的?

1.在服務器端有一個session池,用來存儲每一個用戶提交session中的數據,Session對於每個客戶端(或者說瀏覽器實例)是「人手一份」,用戶首次與Web服務器創建鏈接的時候,服務器會給用戶分發一個SessionID做爲標識。SessionID是一個由24個字符組成的隨機字符串。用戶每次提交頁面,瀏覽器都會把這個SessionID包含在HTTP頭中提交給Web服務器,這樣Web服務器就能區分當前請求頁面的是哪個客戶端,而這個SessionID是一cookie的方式保存的在客戶端的內存中的,若是想要獲得Session池中的數據,服務器就會根據客戶端提交的惟一SessionID標識給出相應的數據返回。

2.輸入正確的帳號密碼,點擊登陸,頁面就會輸出  「admin --- 點擊登陸」

2、Session池中每一個客戶端的數據是怎麼存儲的?

1.存儲在Session池中的數據是全局型的數據,能夠跨頁面訪問,每一個SessionID中只存儲惟一的數據,如:首先你這樣設定:session["userName"]="admin",而後你在會話還沒結束的session還沒過時的狀況下,你又設定:session["userName"]="123";這樣這個SessionID沒變,然而Session池中的數據則被覆蓋。此時session["userName"]的值就是「123」,而不是其它。

2.Session池中的數據不能跨進程訪問。如:打開login.aspx頁面寫入session[「userName」]="admin";而後login頁面不關閉,即此會話不結束,在這是你再在另一個瀏覽器中打開一個login.aspx頁面則session["userName"]=null

3.輸入帳號密碼,點擊登陸頁面輸出  「admin --- 點擊登陸」 ,若是緊接着點擊獲取session按鈕,則頁面只輸出"admin--- 點擊獲取session",若是頁面不關閉,打開另一個瀏覽器,點擊獲取session按鈕,則頁面無法應。

三丶session的聲明週期與銷燬

1.session存儲數據計時是滾動計時方式。具體是這樣的,若是你打開寫入session,從寫入開始,此頁面若是一直沒有提交操做,則默認時間是20分鐘,20分鐘後session被服務器自動銷燬,如過有提交操做,服務器會從提交後從新計時以此類推,直至設定時間內銷燬。

2.能夠設置session的銷燬時間。上面代碼有提到。

四丶session中保存的數據是在服務端的,而每一個用戶如進行登陸操做,都要進行session數據寫入,因此建議慎用session,就是少用。

相關文章
相關標籤/搜索