asp.net中session的原理及应用
Session簡(jiǎn)介丶特性
1.Session是一種Web會(huì)話(huà)中的常用狀態(tài)之一。
2.Session提供了一種把信息保存在服務(wù)器內(nèi)存中的方式。他能儲(chǔ)存任何數(shù)據(jù)類(lèi)型,包含自定義對(duì)象。
3.每個(gè)客戶(hù)端的Seesion是獨(dú)立存儲(chǔ)的。
4.在整個(gè)會(huì)話(huà)過(guò)程中,只要SessionID的cookie不丟失,都會(huì)保存Session信息的。
5.Session不能跨進(jìn)程訪(fǎng)問(wèn),只能由該會(huì)話(huà)的用戶(hù)訪(fǎng)問(wèn)。應(yīng)為提取Session數(shù)據(jù)的id標(biāo)識(shí)是以Cookie的方式保存到訪(fǎng)問(wèn)者瀏覽器的緩存里的。
6.當(dāng)會(huì)話(huà)終止,或過(guò)期時(shí),服務(wù)器就清除Session對(duì)象。
7.Session常用于保存登錄用戶(hù)的ID.
8.Session保存的數(shù)據(jù)是跨頁(yè)面全局型的。
Session的使用
這里我寫(xiě)入一個(gè)例子,便于下面闡述。
?
<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) { //這個(gè)函數(shù)是為了知道哪一個(gè)提交按鈕被點(diǎn)擊$("#hidlgc").val(""); //清空隱藏值$("#hidlgc").val(action); //給隱藏控件賦值}</script> </head> <body><form id="form1" method="post" action="MySession.aspx"><table><tr><td>賬號(hào):</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 οnclick="getSessionClick('lgclick')" type="submit" value="登錄" /><input type="submit" οnclick="getSessionClick('getSession')" value="獲取session" /><input type="submit" οnclick="getSessionClick('backLg')" value="退出登錄" /></td></tr></table></form> </body>?
protected void Page_Load(object sender, EventArgs e){//把用戶(hù)id寫(xiě)入session中if (Request.Form["hidlgclick"] == "lgclick"){if(Request.Form["txtUid"].ToString()=="admin"&&Request.Form["txtUid"].ToString()=="admin") //判斷用戶(hù)登錄{Session["userName"] = Request.Form["txtUid"].ToString(); //把用戶(hù)id保存到session中Response.Write(Session["userName"].ToString()+"---點(diǎn)擊登錄"); //獲取session,并寫(xiě)入頁(yè)面}}//獲取Sessionif (Request.Form["hidlgclick"] == "getSession"){if (Session["userName"] != null){Response.Write(Session["userName"].ToString() + "---點(diǎn)擊獲取session"); //獲取session,并寫(xiě)入頁(yè)面}}//取消當(dāng)前會(huì)話(huà),相當(dāng)于注銷(xiāo)(退出登錄)。if (Request.Form["hidlgclick"] == "backLg"){Session.Abandon();}} <system.web><sessionState timeout="40"></sessionState> <!---設(shè)置session的過(guò)期時(shí)間,時(shí)間以分鐘為單位-->Session原理(根據(jù)上面例子闡述)
?
一、session是怎么存儲(chǔ),提取的?
1.在服務(wù)器端有一個(gè)session池,用來(lái)存儲(chǔ)每個(gè)用戶(hù)提交session中的數(shù)據(jù),Session對(duì)于每一個(gè)客戶(hù)端(或者說(shuō)瀏覽器實(shí)例)是“人手一份”,用戶(hù)首次與Web服務(wù)器建立連接的時(shí)候,服務(wù)器會(huì)給用戶(hù)分發(fā)一個(gè)SessionID作為標(biāo)識(shí)。SessionID是一個(gè)由24個(gè)字符組成的隨機(jī)字符串。用戶(hù)每次提交頁(yè)面,瀏覽器都會(huì)把這個(gè)SessionID包含在HTTP頭中提交給Web服務(wù)器,這樣Web服務(wù)器就能區(qū)分當(dāng)前請(qǐng)求頁(yè)面的是哪一個(gè)客戶(hù)端,而這個(gè)SessionID是一cookie的方式保存的在客戶(hù)端的內(nèi)存中的,如果想要得到Session池中的數(shù)據(jù),服務(wù)器就會(huì)根據(jù)客戶(hù)端提交的唯一SessionID標(biāo)識(shí)給出相應(yīng)的數(shù)據(jù)返回。
2.輸入正確的賬號(hào)密碼,點(diǎn)擊登錄,頁(yè)面就會(huì)輸出 ?“admin --- 點(diǎn)擊登錄”
二、Session池中每個(gè)客戶(hù)端的數(shù)據(jù)是怎么存儲(chǔ)的?
1.存儲(chǔ)在Session池中的數(shù)據(jù)是全局型的數(shù)據(jù),可以跨頁(yè)面訪(fǎng)問(wèn),每個(gè)SessionID中只存儲(chǔ)唯一的數(shù)據(jù),如:首先你這樣設(shè)定:session["userName"]="admin",然后你在會(huì)話(huà)還沒(méi)結(jié)束的session還沒(méi)過(guò)期的情況下,你又設(shè)定:session["userName"]="123";這樣這個(gè)SessionID沒(méi)變,然而Session池中的數(shù)據(jù)則被覆蓋。此時(shí)session["userName"]的值就是“123”,而不是其它。
2.Session池中的數(shù)據(jù)不能跨進(jìn)程訪(fǎng)問(wèn)。如:打開(kāi)login.aspx頁(yè)面寫(xiě)入session[“userName”]="admin";然后login頁(yè)面不關(guān)閉,即此會(huì)話(huà)不結(jié)束,在這是你再在另外一個(gè)瀏覽器中打開(kāi)一個(gè)login.aspx頁(yè)面則session["userName"]=null
3.輸入賬號(hào)密碼,點(diǎn)擊登錄頁(yè)面輸出??“admin --- 點(diǎn)擊登錄” ,如果緊接著點(diǎn)擊獲取session按鈕,則頁(yè)面只輸出"admin--- 點(diǎn)擊獲取session",如果頁(yè)面不關(guān)閉,打開(kāi)另外一個(gè)瀏覽器,點(diǎn)擊獲取session按鈕,則頁(yè)面沒(méi)法應(yīng)。
三丶session的聲明周期與銷(xiāo)毀
1.session存儲(chǔ)數(shù)據(jù)計(jì)時(shí)是滾動(dòng)計(jì)時(shí)方式。具體是這樣的,如果你打開(kāi)寫(xiě)入session,從寫(xiě)入開(kāi)始,此頁(yè)面如果一直沒(méi)有提交操作,則默認(rèn)時(shí)間是20分鐘,20分鐘后session被服務(wù)器自動(dòng)銷(xiāo)毀,如過(guò)有提交操作,服務(wù)器會(huì)從提交后重新計(jì)時(shí)以此類(lèi)推,直至設(shè)定時(shí)間內(nèi)銷(xiāo)毀。
2.可以設(shè)置session的銷(xiāo)毀時(shí)間。上面代碼有提到。
四丶session中保存的數(shù)據(jù)是在服務(wù)端的,而每個(gè)用戶(hù)如進(jìn)行登錄操作,都要進(jìn)行session數(shù)據(jù)寫(xiě)入,所以建議慎用session,就是少用。
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhaohongtian/p/6810291.html
總結(jié)
以上是生活随笔為你收集整理的asp.net中session的原理及应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用PHP实现用户登录和注册的功能
- 下一篇: ASP.NET MVC Json的序列化