我上依賴於在登錄時從數據庫中提取一些信息,並在此人在堅持記錄信息的.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);
}
它會更好,試圖母版頁上攻擊這個使用隱藏域?每次我做搜索說「不使用會話,不使用全局變量。」基本上任何想法我有,人有一定的頁面,說明其有史以來最糟糕的想法:)
任何建議,將不勝感激。
是的,我會同意它可能是一個解決方案,在這一點上不存在的問題。它仍然很高興聽到好的解決方案和建議。 – CarComp 2013-02-26 20:46:20