淺談一下session問題

        正在作的一個項目,用的是框架結構,頁面間傳值除了登錄id用的是cookie通常用的都是session,,可是偶爾會出現session值丟失的問題,網上查詢了一下,框架session傳值丟失的問題不少,但都沒有什麼好得解決辦法,只有綜合網友的方法,將bug降到最低。web

         1框架中session易丟失的緣由:sql

                由於一個框架集有多個頁面,當框架或者框架內文件刷新時,IE和IIS會有時會不肯定是否全部頁面都來在同一請求,這時候session就會被拒絕訪問,因而session所有丟失了,只要使用框架,這種現象很難避免。瀏覽器

         2常規的一些解決辦法:cookie

              (1)session是比較容易丟失的,數量最好不要太多。我接手的一個系統中 被人寫了20多個session 就很容易丟失。。最後改爲了用狀態服務來保存。就OK了。不過指向的服務器須要開啟一個服務session

                 管理工具-服務-啓動asp.net StateServer 就能夠了 ,在WEB.CONFIG中設置
       <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" cookieless="false" timeout="1000"/>併發

               (2)在Internet信息服務-->默認站點-->屬性-->web站點下的鏈接超時,把這個值該大些,同時,設置session.timeout。框架

                   這個方法不太可取,每一個pc機都得改ie配置asp.net

                (3)嘗試一下將將session暫時保存到viewstate當中
                (4)有個網友給了個挺有創意的方法:less

             你爲何非得用session呢?用一個類定義一些靜態字段,把要保存在session中的值保存在字段中,不管什麼時候均可以訪問
class SaveSession
{
   public static string User;
   public static string Name;
}tcp

//在保存session的地方如此代替
SaveSession.User = txtUser.Text;
SaveSession.Name = txtName.Text;


//在要取session的地方如此代替
string strUser = SaveSession.User;
string strName = SaveSession.Name;

                 在實際操做中,這種方法是不可取的,

(1)沒有考慮到實際應用中併發操做的狀況,使用靜態字段,a和b同時使用,a可能調用的是b的數據,而b一樣可能調用的是a的數據,若是用的人多了 ,更慘不忍睹了。

(2)即便瀏覽器關閉,用戶中止操做,靜態字段還保留着值,若是不處理的話下一我的讀取的時候就會出現數據錯誤的大問題了。。

        若是上面的方法都嘗試過,丟失的問題還比較嚴重,呵呵,有不小的多是框架頁面跳轉加載傳值的問題了,不能誤解爲session問題,雖然設置斷點跟蹤也是session丟失,實際否則(我就是...非常鬱悶),簡單拿下個人例子剖析一下:

1框架:

      <frameset rows="100%,0%" name="forumlist">
   <frame name="top" src="Default4.aspx" >
   <frame name="bottom" src="about:blank">
  </frameset>

2 .top頁面保存session【「id」】

前臺將session保存到本後臺頁面

 $("#btn2").click(function(){
                     $("input").each(function(){                         
                          if (this.checked)
                          {
                            $.get("ym_xtwh_rcwh_kzwh_man.aspx",{ID:this.value},function(data){
                                                          
                                    });   

                                          if (window.parent.forumlist.rows != "50%,*")
                                                {
                                             window.parent.forumlist.rows = "50%,*"
                                             }                                             
                                                 form1.action="ym_xtwh_rcwh_kzwh_mod.aspx";
                                                 form1.target="bottom";
                                                 form1.submit();      
               
                          }
                      }); 
                });

       本頁面後臺接收:

 if (!string.IsNullOrEmpty(Request.QueryString["ID"]))
            {
                Session["KZDM"] = Request.QueryString["ID"].ToString();
            }

3.框架加載bottom頁面

   判斷session

       if (Session["KZDM"] != null)

   錯誤現象:加載的時候常常會第一次取不到session值,斷點跟蹤session也是在框架加載頁面的時候值丟失,誤覺得是session丟失

    解決方法:

    將上面的紅色代碼框架加載bottom頁面部分放到回調函數以內:

 $("#btn2").click(function(){
                     $("input").each(function(){                         
                          if (this.checked)
                          {
                            $.get("ym_xtwh_rcwh_kzwh_man.aspx",{ID:this.value},function(data){

  if (window.parent.forumlist.rows != "50%,*")
                                                {
                                             window.parent.forumlist.rows = "50%,*"
                                             }                                             
                                                 form1.action="ym_xtwh_rcwh_kzwh_mod.aspx";
                                                 form1.target="bottom";
                                                 form1.submit();      
    
                                                          
                                    });   
                                            
                          }
                      }); 
                });

                         將此問題記錄一下 增強本身記憶

相關文章
相關標籤/搜索