Session簡介丶特性
--------------------------------------------------------------------------------
1.Session是一種Web會話中的常用狀態之一。
2.Session提供了一種把資訊儲存在伺服器記憶體中的方式。他能儲存任何資料類型,包含自訂對象。
3.每個用戶端的Seesion是隔離儲存區 (Isolated Storage)的。
4.在整個會話過程中,只要SessionID的cookie不丟失,都會儲存Session資訊的。
5.Session不能跨進程訪問,只能由該會話的使用者訪問。應為提取Session資料的id標識是以Cookie的方式儲存到訪問者瀏覽器的緩衝裡的。
6.當會話終止,或到期時,伺服器就清除Session對象。
7.Session常用於儲存登入使用者的ID.
8.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原理(根據上面例子闡述)
--------------------------------------------------------------------------------
一、session是怎麼儲存,提取的?
1.在伺服器端有一個session池,用來儲存每個使用者提交session中的資料,Session對於每一個用戶端(或者說瀏覽器執行個體)是“人手一份”,使用者首次與Web伺服器建立串連的時候,伺服器會給使用者分發一個SessionID作為標識。SessionID是一個由24個字元組成的隨機字串。使用者每次提交頁面,瀏覽器都會把這個SessionID包含在HTTP頭中提交給Web伺服器,這樣Web伺服器就能區分當前請求頁面的是哪一個用戶端,而這個SessionID是一cookie的方式儲存的在用戶端的記憶體中的,如果想要得到Session池中的資料,伺服器就會根據用戶端提交的唯一SessionID標識給出相應的資料返回。
2.輸入正確的帳號密碼,點擊登入,頁面就會輸出 “admin --- 點擊登入”
二、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,就是少用。