2013-02-25 51 views
0

我上依賴於在登錄時從數據庫中提取一些信息,並在此人在堅持記錄信息的.NET項目。

該網站是複雜的,但我覺得過度使用Session變量可能正在發生。我現在要說我正在使用會話來存儲大約5個int值和3或4個字符串值。我沒有存儲任何複雜的對象。我網站的每一頁都多次使用這些值,我覺得每次發佈它們都會很荒謬。在這一點上,我認爲這個視圖狀態比會話更好,但我願意接受建議。會話的可變

this.Session["vendorCategoryId"] 
this.Session["ftp_directory_name"] 
this.Session["VendorCodeOptionRefId"] 

實施例當前使用我考慮實現在一個類中的結構,並具有一組方法那裏,我從Global.asax.cs中使用在Session_Start()事件可能是一個解決方案。 (編輯:這個解決方案是爲了避免每次任何代碼想要訪問變量時都必須敲擊db)。

在VendorSessionData.cs類

public struct VendorData 
    { 
     public int VendorCategoryId; 

     public int NKIAccountingCode; 

     public int OptionCodeRefId; 

     public string FtpDirName; 
    } 


    /// <summary> 
    /// The set vendor session data. 
    /// </summary> 
    public class VendorSessionData 
    { 
     #region Public Methods 

     public static VendorData GetVendorData(Guid vendorGuid) 
     { 
      VendorData retVal = new VendorData(); 

      using (NKIDBDataContext db = new NKIDBDataContext()) 
      { 

       vendorInfo vendorRefs = (from vendorInfo in db.vendorInfos where vendorInfo.guid == vendorGuid.ToString() select vendorInfo).SingleOrDefault(); 
       if (vendorRefs != null) 
       { 
        retVal.VendorCategoryId = vendorRefs.category_id; 
        retVal.NKIAccountingCode = vendorRefs.nki_vendor_id; 
        retVal.OptionCodeRefId = vendorRefs.option_ref_id; 
        retVal.FtpDirName = vendorRefs.ftp_directory_name; 
       } 

      } 

      return retVal; 
     } ...... 

而在的global.asax.cs

public class Global : HttpApplication 
     { 

      public static VendorData CurrentVendorData; 

      public void Session_Start(object sender, EventArgs e) 
      { 
/////////////////FYI tmpVendorGuid is set in code above this point 
       Guid tmpVendorGuid; 
       if (Guid.TryParse(vendorGuid, out tmpVendorGuid)) 
       { 
        CurrentVendorData = VendorSessionData.GetVendorData(tmpVendorGuid); 
       } 

它會更好,試圖母版頁上攻擊這個使用隱藏域?每次我做搜索說「不使用會話,不使用全局變量。」基本上任何想法我有,人有一定的頁面,說明其有史以來最糟糕的想法:)

任何建議,將不勝感激。

回答

2

數據量並不特別令人驚訝,但選擇是。

正常情況下,會議將存儲用戶信息(通常只是他們的ID - 您將獲取從DB其餘部分)。 「ftp_directory_name」聽起來像是一個配置變量或每個用戶的設置。

我很驚訝,你沒有在數據庫中的唯一ID存儲VendorData,然後只是獲取詳細信息(你需要的供應商ID存儲在會話 - 如果這是不一樣的用戶) 。

該解決方案旨在避免每次任何一段代碼想要訪問的變量

這似乎是它可能是那並不是問題的解決時間,以敲定該數據庫不存在 - 您是否看到訪問時間存在問題,您確定這是正確的解決方案嗎?無論如何,你將不得不擊中大部分頁面的數據庫。每頁加載一個額外的查詢不太可能是一個問題。

+0

是的,我會同意它可能是一個解決方案,在這一點上不存在的問題。它仍然很高興聽到好的解決方案和建議。 – CarComp 2013-02-26 20:46:20

1

我說你可能已經在做了正確的......會議的目的是爲存儲信息爲用戶的「會話」 ......我不認爲你徵稅太多,如果你是存儲整個數據集或東西...有幾個INT變量和一個字符串佔用不到1K的內存...如果你有1000個用戶同時登錄,他們的集體「會話」足跡仍然是1MB左右。 ..今天的服務器上的pitons。

相關問題