2012-08-13 41 views
3

我開發使用2個個子項目的應用架構: 一)asp.net web應用程序(它包括用戶界面和業務邏輯)和 B)類庫。 (它覆蓋數據訪問層)訪問類庫中的會話。

後系統用戶成功登錄時,用戶信息被存儲在會話對象。

我面臨的問題是,當我嘗試訪問類庫項目(數據訪問層)會話對象時,它總是返回null。

我需要訪問類庫項目中的會話對象,因爲,在我的情況下,每個用戶都有自己的用戶名和密碼的數據庫訪問(出於安全原因);

那麼,如何如何閱讀和/在類庫項目

+2

你根本做不到,唯一的辦法就是通過web項目調用類庫的具體方法,並將會話的值傳遞給該方法。 – yogi 2012-08-13 08:46:52

+2

如果這個應用程序有很多用戶,我會重新考慮爲每個用戶登錄數據庫。您以這種方式禁用連接池。 – 2012-08-14 05:37:57

+0

我面臨着完全相同的問題,你找到任何解決方案,Bikash? – Akbari 2015-12-14 06:57:10

回答

5

使用System.Web.HttpContext.Current.Session對象寫入會話對象。

+3

它只給會話對象提供參考。該sesion對象值始終爲空 – 2012-08-13 08:49:43

+0

您不會從此處獲取當前會話值。 ü只得到僅供參考 – 2017-12-13 16:41:42

5

首先,正如Peri正確地注意到的那樣 - 您需要再次考慮是否爲每個用戶分別登錄數據庫是一個好主意 - 因爲您連接池鬆動(不同用戶將無法重新使用現有連接 - 並且創建一個新的sql連接非常昂貴)。

如果你真的想保持獨立的數據庫用戶,我想創建接口從數據訪問抽象會話:

public interface ILoginDataService 
{ 
    LoginData Current { get; } 
} 

而實施將來自會議通過的登錄數據。通過這種方式,您不會在數據訪問邏輯中擁有會話依賴性,因此它將更具可測試性,您也可以分別考慮問題。

+0

我試圖做這樣的事情,因爲我有我的至極每個表都有一個clientId多客戶數據庫,因此每個查詢我做了由客戶端ID進行過濾。我怎樣才能以某種方式使用此接口,而不必在每個方法調用中都傳遞它? – Marlon 2014-05-08 18:32:35

+0

通常使用依賴注入容器。 – Giedrius 2014-05-09 05:17:28

2

這是我在庫中用於獲取會話信息的代碼。

public static string Entity() 
{ 
    string entity = ""; 
    HttpContext httpContext = HttpContext.Current; 
    if (httpContext.ApplicationInstance.Session.Count > 0) 
     entity = httpContext.ApplicationInstance.Session["EntityCode"].ToString(); 

    return entity; 
} 
+0

這適用於我+1 – Zafar 2017-05-31 23:25:36