2013-03-16 43 views
0

我在connString存儲在會話變量中的項目上工作。問題在於,當用戶不在一段時間(有意義)時會話耗盡,從而使用戶不得不再次登錄以創建新連接。動態連接字符串(現在存儲在會話中,不好)

用戶從Web服務器上配置的ODBC連接列表中選擇他的數據庫,因此用戶可以選擇的不同connStrings不能存儲在web.config中,因爲用戶可以隨意添加新連接。

我想知道如何解決這個問題。我應該告訴用戶不要離開他的電腦20分鐘+或者我可以將connString存儲在其他地方嗎?我看到網站彈出窗口顯示「你的會話將在5分鐘後過期,按OK繼續使用該網站」,或類似的東西。因爲如果user1選擇「connString1」而user2之後選擇了「connString2」,那麼user1將不幸地在「connString2」上運行,而且它也不是一個可變的靜態變量。

希望你能幫助:)

**

可這是一個解決辦法?: 我創造「的BasePage」這我的網頁繼承。在這個basepage中,我創建一個隱藏的字段,並在加載時將connString添加到value屬性。此外,我將加密connString,以便用戶無法在源代碼中看到該值。 然後,如果會話超時,我將通過使用隱藏字段中的值恢復會話,並且網站不會崩潰。

回答

0

你可以使用app.config來獲取和設置配置文件。看看這個來看看存儲文件的實現。它同樣容易獲得設置。 ConfigurationManager doesn't save settings

//編輯:如果你不希望用戶能夠看到你的連接字符串名稱,那麼你可以在hidden_​​html或cookie或會話cookie中提供另一個。在這個例子中,我使用了一個cookie。這應該解決你的問題。

要設置的cookie:

HttpCookie myCookie = new HttpCookie("UserSettings"); 
myCookie["ConnectionString"] = "MyCOnnectionValue"; 
myCookie.Expires = DateTime.Now.AddDays(1d);//For one day. 
Response.Cookies.Add(myCookie);//Will store the cookie within the users browser so your code can read from it at every request. 

則:

if (Request.Cookies["UserSettings"] != null) 
{ 
    string userSettings; 
    if (Request.Cookies["UserSettings"]["ConString"] != null) 
    { userSettings = Request.Cookies["UserSettings"]["ConString"]; } 
} 

string connectionStringNameToUse; 

if(userSettings =="Connection1"){ 
    connectionStringNameToUse = "here you can have your name of connectionsstring"; 
}etc with ypur other connectionsstrings here. 

//Then use your connectionsstring here: 
    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings[connectionStringNameToUse ].ToString())) 
       { 
       cn.Open(); 

       using (SqlCommand command = new SqlCommand 
        ("delete TBL from RatingListObjects TBL where (TBL.TradeObject1Id = @MY_ID) or (TBL.TradeObject2Id = @My_ID) ", cn)) 
       { 
        command.Parameters.Add(new SqlParameter("@MY_ID", customerToRemove.TradeObjectId)); 
        command.ExecuteNonQuery(); 
       } 
      } 

在另一方面。我會去用數據庫中的其他用戶數據保存選擇的用戶數據庫。但是,如果您只希望用戶在程序設置的特定時間內擁有所選的連接字符串,則這是可行的。它不會讓他們看到連接字符串名稱。希望這有助於,祝你好運!

+0

林不知道我明白。這是ASP.net,我認爲我只有一個web.config在這裏?如果我嘗試在網絡中添加/編輯某些內容。在運行時,整個網站將重置並停止其他用戶的工作 – Thomas 2013-03-16 19:48:22

+0

@Thomas如果你沒有你可以添加它。下面是另一個問題的例子:http://stackoverflow.com/questions/5989736/accessing-app-config-in-asp-net – 2013-03-16 20:56:18

+0

謝謝Magnus!你能否在我編輯的文章中看看我的「可能的解決方案」,並說出它是否有意義 – Thomas 2013-03-16 21:14:19

0

您可以將用戶的連接字符串首選項存儲在他們的配置文件中,然後保存其配置文件? http://odetocode.com/articles/440.aspx

您應該也可以爲匿名用戶執行此操作。另外,我不知道Profile API的安全性如何,它們應該沒問題,但爲防萬一,您可能需要存儲Enum值,然後將其映射到代碼中的Connection字符串。

+0

我猜這需要我有一個額外的數據庫來存儲用戶應該連接到哪個數據庫。我希望得到另一個更簡單的解決方案,但我會研究它,謝謝:) – Thomas 2013-03-16 19:54:56

相關問題