【问题标题】:Forms Authentication and All fine except blank datavalue field表单身份验证和除空白数据值字段外的所有内容都很好
【发布时间】:2011-01-08 13:23:08
【问题描述】:

我正在尝试在我正在开发的 c# web 应用程序中创建和读取表单身份验证 cookie。

我创建工单

FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, "myData", DateTime.Now, DateTime.Now.AddMinutes(60), true, "Hello");

// Now encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket);

// 将 cookie 添加到传出 cookie 集合中 Response.Cookies.Add(authCookie);

然后当我使用以下方式取回票时:

HttpCookie authCookie = Context.Request.Cookies[cookieName];

FormsAuthenticationTicket authTicket = null;

authTicket = FormsAuthentication.Decrypt(authCookie.Value)

我可以看到 authTicket 现在拥有所有数据,cookie 创建日期,到期日期,name="mydata"... 等等。

但 dataValue 中没有任何内容...我期待“Hello”出现。

当我调试时,我可以看到它在加密之前就在票证中......我想它在解密中丢失了?

有什么帮助吗?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    为了设置 cookie,您使用 FormsAuthentication.FormsCookieName 属性,而当您读取它时,您使用 cookieName 变量。你确定两者都指向同一个cookie吗?还要使用 FireBug 验证 cookie 中的值是否与您在调试时看到的值相同。

    【讨论】:

    • 我假设它是正确的 cookie……我在加密之前查看了创建时间,它在解密端匹配……所以我认为这是正确的 cookie 名称。除了 datavalue 字段为空白外,工单上的一切看起来都不错。很奇怪。
    • 一定有东西覆盖了初始 cookie 值。您可以通过 FireBug 确认这一点。如果您在解密时具有相同的 cookie 值,您将在解密票证的UserData 属性中获得正确的字符串。我刚刚在控制台应用程序中按顺序执行了您的代码,一切都很好。
    • 最好我能说一切看起来都不错,我可以在 firebug 中看到 cookin,但它是加密的,所以我看不到值是什么。在检索方面,我可以在解密之前看到票证,并且 datavalue 字段有一个加密字符串,但在解密函数之后,该字段为空白。我很困惑。是否有某个我不知道的设置阻止了 datavalue 字段通过?
    • 所以您确认您在调试authCookie.Value 时看到的字符串与您传递给FormsAuthentication.Decrypt 函数的字符串完全相同?
    • 你是达林人……现在一切正常!非常感谢你们......我一直在努力解决这个问题!
    【解决方案2】:

    尝试使用 SetAuthCookie(authCookie) 代替 REsponse.Cookies.Add(authCookie)。

    http://msdn.microsoft.com/en-us/library/aa480476.aspx

    【讨论】:

    • 这似乎只是设置授权用户并且似乎不会以任何方式影响票证。还有其他想法吗?
    • 您可以在将票证添加到 cookie 之前和之后尝试解密票证,以确保在任何一个过程中都不会发生“容忍”异常。事件日志中是否有任何消息表明异常处理可能未捕获到的服务器级别的可能系统错误?
    • 在推送 cookie 后,我开始在代码中的不同位置解密 cookie,一切都很好,直到页面重新加载。我一直遍历代码,最后它仍然很好,页面加载后的第一件事...... datavalue 字段中没有任何内容,并且 data 字段的加密字符串不同。我不知道为什么! IIS 中有什么东西?
    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多