Scenerio - 我正在编写一个基于您使用的登录框(database1和database2)的Web应用程序,它将连接到相应的数据库。我已将web.config设置为包含两个连接字符串。在每个框的On_Authenticate方法上,我检查以验证用户,然后将基于登录框的字符串发送到名为Authenticate user的类中的公共变量。此公共变量检查cookie并从变量中获取连接字符串名称,如果cookie为null,则设置新cookie,使所有现有cookie到期并设置cookie值。
现在一旦完成,每次我点击数据库(使用LINQ2SQL),我都会创建一个datacontext并发送AuthenticatedUser.ConnectionString。这将检查cookie并发送获取用于提取数据的连接字符串。 Herer是AuthenticatedUser Class ...
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。可能会发生什么?
答案 0 :(得分:1)
在设置Cookie而不是Request.Cookies集合时,您需要将Cookie添加到Response.Cookies集合中。只有Response中的cookie会被发送回用户的浏览器。