之情况 - 我书面方式,基于你使用的登录框(数据库1和DATABASE2)关闭一个web应用程序,将您连接到数据库cooresponding。我已经设置了web.config中保留两个连接字符串。在每个盒子的On_Authenticate方法我检查,以验证用户身份,然后发送基于登录框中输入一个字符串到公共变量在一个名为验证用户类。这个公共变量检查Cookie,并从变量获取连接字符串名称,如果cookie为null,则设置新的Cookie,到期所有现有的cookie并设置cookie的值。

现在,一旦做到这一点,每次我打的数据库(使用LINQ2SQL)创建于AuthenticatedUser.ConnectionString一个DataContext和发送。这将检查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);我得到一个空引用错误。这是要通过获取并检查该Cookie,返回一个空饼干。什么可以怎么回事?

有帮助吗?

解决方案

您需要将Cookie添加到Response.Cookies集合设置它,而不是Request.Cookies集合的时候。只有在响应的cookie被发送回用户的浏览器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top