C#Cookie没有保存其信息

时间:2010-09-29 13:38:47

标签: linq-to-sql httpcookie

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。可能会发生什么?

1 个答案:

答案 0 :(得分:1)

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