濮阳杆衣贸易有限公司

主頁 > 知識庫 > asp.net session的使用與過期實(shí)例代碼

asp.net session的使用與過期實(shí)例代碼

熱門標(biāo)簽:辦理400電話證件 世紀(jì)佳緣地圖標(biāo)注怎么去掉 寧波自動(dòng)外呼系統(tǒng)代理 外呼系統(tǒng)代理品牌 手機(jī)地圖標(biāo)注如何刪除 怎么給超市做地圖標(biāo)注入駐店 十堰正規(guī)電銷機(jī)器人系統(tǒng) 巫師3為什么地圖標(biāo)注的財(cái)寶沒有 外呼系統(tǒng)費(fèi)用一年

1.Session是一種Web會話中的常用狀態(tài)之一。

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

3.每個(gè)客戶端的Seesion是獨(dú)立存儲的。

4.在整個(gè)會話過程中,只要SessionID的cookie不丟失,都會保存Session信息的。

5.Session不能跨進(jìn)程訪問,只能由該會話的用戶訪問。應(yīng)為提取Session數(shù)據(jù)的id標(biāo)識是以Cookie的方式保存到訪問者瀏覽器的緩存里的。

6.當(dāng)會話終止,或過期時(shí),服務(wù)器就清除Session對象。

7.Session常用于保存登錄用戶的ID.

8.Session保存的數(shù)據(jù)是跨頁面全局型的。

例如我們想了解一下訪問我們網(wǎng)站的用戶瀏覽了幾個(gè)頁面,我們可能在用戶可能訪問到每個(gè)的頁面中加入:

復(fù)制代碼 代碼如下:

%
If Session("PageViewed") = ""Then
 Session("PageViewed") = 1
Else
 Session("PageViewed") = Session("PageViewed") + 1
End If
%>

  通過以下這句話可以讓用戶得知自己瀏覽了幾個(gè)頁面:


復(fù)制代碼 代碼如下:

%
Response.Write("You have viewed " Session("PageViewed") " pages")
%>


Session的使用

復(fù)制代碼 代碼如下:

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>賬號:/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>

.net代碼

復(fù)制代碼 代碼如下:

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()+"---點(diǎn)擊登錄"); //獲取session,并寫入頁面
                }
            }
            //獲取Session
            if (Request.Form["hidlgclick"] == "getSession")
            {
                if (Session["userName"] != null)
                {
                    Response.Write(Session["userName"].ToString() + "---點(diǎn)擊獲取session"); //獲取session,并寫入頁面
                }
            }
            //取消當(dāng)前會話,相當(dāng)于注銷(退出登錄)。
            if (Request.Form["hidlgclick"] == "backLg")
            {
                Session.Abandon();
            }
        }


那么我們要怎么判斷session是否過期了呢

方法一:最笨的方法,在每個(gè)頁面的page_load()方法中判斷。


復(fù)制代碼 代碼如下:

If(Session[“UserId”]!=null)

{

//登陸成功的情況

}

Else

{

//response.write(“script>alter(‘請登陸');/script>”);

}


這種方法在每個(gè)頁面都需要寫入重復(fù)的代碼。代碼冗余

 方法二:可以在HttpModule中判斷,在HttpModule中注冊請求管道的AcquireRequestState

事件(可以拿到session的那個(gè)事件)

步奏:

1:新建一個(gè)繼承IHttpModule接口的類Module

2:讓Module類實(shí)現(xiàn)接口成員。

3:在Init()方法中對Context進(jìn)行注冊AcquireRequestState事件(在這個(gè)事件中可以拿到Session)

4:在方法中寫

復(fù)制代碼 代碼如下:

void context_AcquireRequestState(object sender, EventArgs e)

    {

        HttpApplication app = (HttpApplication)sender;

        if (app.Context.Session["userId"] == null)

        {

            app.Response.Write("script>alert('沒有登錄');/script>");

        }

}


5:在web.config配置文件中system.web>節(jié)點(diǎn)下添加一個(gè)節(jié)點(diǎn)
復(fù)制代碼 代碼如下:

httpModules>

      add name="demo" type="Module"/> !--type后面是命名空間.類名-->

    /httpModules>


使用這種方法會在每個(gè)頁面加載的時(shí)候都先檢查module。

原理是實(shí)現(xiàn)IHttpModule接口的類是在執(zhí)行頁面之前執(zhí)行的。 在page_load()事件執(zhí)行之前就判 斷Session如果不存在就提示。

這種方法效率能高一些,因?yàn)槿绻淮嬖?session直接就可以處理。后面的一系列事件都可以不 用執(zhí)行。


方法三:在page類上做點(diǎn)手腳

Page類中有OnInit()這個(gè)虛方法。

步奏:

1:創(chuàng)建一個(gè)集成Page類的類TestSession

2:在TestSession中重寫OnInit()這個(gè)方法。

3:在OnInit()方法中判斷Session

4:在需要判斷session的頁面集成TestSession這個(gè)類,而不是繼承Page類

這種方法比較靈活,在需要判斷session的頁面中繼承TestSession就可以,不需要判斷session 的頁面直接繼承Page就行了


Session的功能的缺陷

  目前ASP的開發(fā)人員都正在使用Session這一強(qiáng)大的功能,但是在他們使用的過程中卻發(fā)現(xiàn)了ASP Session有以下缺陷:

  進(jìn)程依賴性:ASP Session狀態(tài)存于IIS的進(jìn)程中,也就是inetinfo.exe這個(gè)程序。所以當(dāng)inetinfo.exe進(jìn)程崩潰時(shí),這些信息也就丟失。另外,重起或者關(guān)閉IIS服務(wù)都會造成信息的丟失。
  Session狀態(tài)使用范圍的局限性:剛一個(gè)用戶從一個(gè)網(wǎng)站訪問到另外一個(gè)網(wǎng)站時(shí),這些Session信息并不會隨之遷移過去。例如:新浪網(wǎng)站的WWW服務(wù)器可能不止一個(gè),一個(gè)用戶登錄之后要去各個(gè)頻道瀏覽,但是每個(gè)頻道都在不同的服務(wù)器上,如果想在這些WWW服務(wù)器共享Session信息怎么辦呢?
Cookie的依賴性:實(shí)際上客戶端的Session信息是存儲與Cookie中的,如果客戶端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。
鑒于ASP Session的以上缺陷,微軟的設(shè)計(jì)者們在設(shè)計(jì)開發(fā) ASP.NET Session時(shí)進(jìn)行了相應(yīng)的改進(jìn),完全克服了以上缺陷,使得ASP.NET Session成為了一個(gè)更加強(qiáng)大的功能。

您可能感興趣的文章:
  • android實(shí)現(xiàn)session保持簡要概述及實(shí)現(xiàn)
  • ASP.NET Session使用詳解
  • 在ASP.NET中使用Session常見問題集錦
  • android與asp.net服務(wù)端共享session的方法詳解

標(biāo)簽:嘉興 山西 通遼 景德鎮(zhèn) 泰州 牡丹江 天門

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《asp.net session的使用與過期實(shí)例代碼》,本文關(guān)鍵詞  asp.net,session,的,使用,與,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《asp.net session的使用與過期實(shí)例代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于asp.net session的使用與過期實(shí)例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    远安县| 崇明县| 佛教| 永靖县| 融水| 和硕县| 随州市| 兴化市| 大名县| 云龙县| 琼结县| 罗定市| 昆山市| 萝北县| 旬邑县| 汤原县| 革吉县| 嵊泗县| 吴川市| 云梦县| 海南省| 颍上县| 融水| 浙江省| 德化县| 安顺市| 马龙县| 黄梅县| 易门县| 稻城县| 滨海县| 上栗县| 疏附县| 齐齐哈尔市| 宜昌市| 柳林县| 阆中市| 隆子县| 台前县| 河曲县| 同仁县|