1

使用框架 4.0

场景 1:
   使用 Live.com 登录。
   在 Live.com FormsAuthenticationTicket 中不为空,ticket.name 是我的用户 ID。
   在 Local.com FormsAuthenticationTicket 中为空。
   我不知道这里缺少什么。

场景 2:
   使用 Local.com 登录。
   在 Local.com FormsAuthenticationTicket 中不为空,ticket.name 是我的用户 ID。
   在 Live.com FormsAuthenticationTicket 中为空。

我的机器配置设置在本地和实时站点中是相同的
目标框架是 4.0

ApplicationAuthenticate_request 如下:

HttpCookie AuthCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket ticket = null;
if (AuthCookie != null)
{
    try
    {
        ticket = FormsAuthentication.Decrypt(AuthCookie.Value);
        if (ticket != null && ticket.Name != null)
            Response.Write(ticket.Name);
    }
    catch (Exception ex11)
    {
        string sErr = ex11.Message + ex11.StackTrace;
    }
}

登录代码如下

authenticationTicket = new FormsAuthenticationTicket(UserId, mPersistant, 30);
//FormsAuthenticationTicket authenticationTicketV1 = new FormsAuthenticationTicket(1, userGuid,DateTime.Now, DateTime.Now.AddMinutes(30), lPersistant, "User");
string authEncrypt = FormsAuthentication.Encrypt(authenticationTicket);
FormsAuthenticationTicket authTickChk = FormsAuthentication.Decrypt(authEncrypt);
bool bChk = authTickChk.Name.Equals(authenticationTicket.Name);
// Create form identity from FormsAuthenticationTicket.
id = new FormsIdentity(authenticationTicket);
// Set the Context User
HttpContext.Current.User = this;
4

2 回答 2

1

machine.config 是指 web.config 吗?如果您的 web.config 文件不同,这可能是问题所在

<authentication mode="Forms">
  <forms loginUrl="member_login.aspx"
  cookieless="UseCookies"
  domain="contoso.com" />
</authentication>

您的浏览器只会将 FormsAuth cookie 提交到 web.config 文件中指定的域,也许您已将此设置为每个环境中的不同域?

于 2012-04-07T05:09:58.650 回答
0

听起来表单身份验证 cookie 没有被发送到不同的站点,这是预期的行为。要意识到的是,表单身份验证只是一个带有加密值的 cookie。表单身份验证票证仍然遵守 cookie 的所有规则,其中包括一个站点 (live.com) 设置的 cookie 永远不会发送到另一个站点 (local.com) 的规则。

另外,我建议您使用FormsAuthentication.SetAuthCookie()登录您的用户。登录代码似乎没有设置 cookie。

诸如 Fiddler 之类的工具可能会帮助您解决问题。当你登录时,响应应该包含一个看起来像这样的标题Set-Cookie: .ASPXAUTH=FC0C57A...; path=/; HttpOnly

每个后续请求都将发送一个看起来像的标头Cookie: ASP.NET_SessionId=zcsmunozu0iqshwcvb11qu1m; .ASPXAUTH=FC0C57A...

但是,如果域与设置 cookie 的站点相同,您的浏览器只会发送 .ASPXAUTH cookie。

于 2015-09-10T17:19:20.273 回答