Scenerio - 我正在撰寫一個基於您使用的登錄框(database1和database2)的Web應用程序,它會將您連接到cooresponding數據庫。我已經設置了web.config來保存兩個連接字符串。在每個框的On_Authenticate方法中,我檢查用戶身份驗證,然後將基於登錄框的字符串發送到名爲Authenticate user的類中的公共變量。這個公共變量檢查cookie並從變量中獲取連接字符串名稱,如果cookie爲空,它將設置一個新的cookie,過期所有現有的cookie並設置cookie值。C#Cookie未保存其信息
現在,一旦完成,每次我打到數據庫(使用LINQ2SQL),我創建一個datacontext併發送AuthenticatedUser.ConnectionString。這將檢查cookie併發送獲取連接字符串用於提取數據。 Herer是AuthenticatedUser類...
public class AuthenticatedUser : System.Web.UI.Page
{
public static string ConnectionString
{
get
{
HttpCookie myCookie = HttpContext.Current.Request.Cookies["connectionString"];
return GetConnectionStringFromName(myCookie);
}
set
{
if (HttpContext.Current.Request.Cookies["connectionString"] != null)
{
ExpireCookies(HttpContext.Current);
}
var allCookies = HttpContext.Current.Request.Cookies.AllKeys;
HttpCookie cookie = new HttpCookie("connectionString");
cookie.Value = value;
cookie.Expires = DateTime.Now.AddYears(100);
HttpContext.Current.Request.Cookies.Add(cookie);
}
}
private static string GetConnectionStringFromName(HttpCookie myCookie)
{
string connectionStringName = myCookie.Value;
return ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
}
private static void ExpireCookies(HttpContext current)
{
var allCookies = current.Request.Cookies.AllKeys;
foreach (var cook in allCookies.Select(c => current.Response.Cookies[c]).Where(cook => cook != null))
{
cook.Value = "";
cook.Expires = DateTime.Now.AddDays(-1);
current.Request.Cookies.Remove(cook.Name);
cook.Name = "";
}
}
}
現在,這似乎是工作在從登錄的第一次點擊。當我鍵入用戶信息,並通過該步驟,我可以看到設置的cookie /然而,在第一次真正的數據庫調用,我使用PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString);
我得到一個空引用錯誤。它正在通過Get,它會檢查cookie並返回一個空的cookie。這裏會發生什麼?
我正在打的是連接字符串名稱而不是實際的連接字符串。我將該名稱發送到GetConnectionStringFromName()以獲取連接字符串本身 – EvanGWatkins 2010-09-29 13:44:28
@Evan - 對不起,我錯過了。那麼,所有您需要做的就是將cookie存儲在Response中。 – tvanfosson 2010-09-29 13:47:09
謝謝,我不能相信我結束了。謝謝! – EvanGWatkins 2010-09-29 14:00:52