【问题标题】:C# Cookie is not saving its informationC# Cookie 不保存其信息
【发布时间】:2010-09-29 13:38:47
【问题描述】:

场景 - 我正在编写一个基于您使用的登录框(数据库 1 和数据库 2)的 Web 应用程序,它将您连接到相应的数据库。我已将 web.config 设置为保存两个连接字符串。在每个框的 On_Authenticate 方法上,我检查以验证用户身份,然后将基于登录框的字符串发送到名为 Authenticate user 的类中的公共变量。此公共变量检查 cookie 并从变量中获取连接字符串名称,如果 cookie 为空,则设置一个新 cookie,使所有现有 cookie 过期并设置 cookie 值。

现在一旦完成,每次我访问数据库(使用 LINQ2SQL)时,我都会创建一个数据上下文并发送 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。这里会发生什么?

【问题讨论】:

    标签: linq-to-sql httpcookie


    【解决方案1】:

    设置时需要将cookie添加到Reponse.Cookies集合而不是Request.Cookies集合。只有响应中的 cookie 被发送回用户的浏览器。

    【讨论】:

    • 我正在存储的是连接字符串名称,而不是实际的连接字符串。我将该名称发送到 GetConnectionStringFromName() 以获取连接字符串本身
    • @Evan -- 抱歉,我错过了。因此,您需要做的就是将 cookie 存储在 Response 中。
    • 谢谢,我不敢相信我看过了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    相关资源
    最近更新 更多