2

我有以下问题:我研究了在同一域上的两个应用程序之间共享 cookie,但我很确定我遗漏了一些东西,还没有找到我的答案。

我在 webistes 上有两个应用程序,如下所示:app.domain.com 和 portal.app.domain.com 第一个应用程序是 Orchard cms,我创建了自己的自定义会员提供程序,因此 orchard 中的身份验证如下所示:

 if (ModelState.IsValid && CustomMembershipProvider.ValidateUser(userNameOrEmail, password))
 {
    FormsAuthentication.SetAuthCookie(userNameOrEmail, true);
 }

和 web.config 在两个应用程序中。

<authentication mode="Forms">
      <forms name="loginCookie" path="/" loginUrl="~/Users/Account/AccessDenied" timeout="2880" cookieless="UseCookies"
         enableCrossAppRedirects ="true" domain=".domain.com"
         requireSSL="false"/>
    </authentication>

<machineKey validationKey="CB6DEDC99140ABCEA1CFE08BEF8407BE2AE60DDB905264F6F7FAA9650B5AB4F1986F84878B4842FB9B51EDD477FFC518C6B6F1687FF25D5BAE883C313F05A6A4" decryptionKey="B0F735974F5261E63D07F4571FB11B392477173098F71E7CA76C1DD9A459C638" validation="SHA1" decryption="AES" />

第二个应用程序是 asp.net mvc 4 应用程序。

每次都会创建 Cookie,因此它可以正常工作,但 portal.app.domain.com 不会“看到”loginCookie。Request.IsAuthenticated 返回 false 并且 Request.Count 不包含我想要的有效数量的 cookie。更重要的是,当我登录 portal.app.domain.com 时,loginCookie 的创建方式完全相同,但具有新值。奇怪的是我可以 fiddler 看到域的所有 cookie。我发现了一些关于重定向的东西,但是有人可以向我解释更多关于它的信息(我应该添加什么?),此外,是否可以在不重定向的情况下共享 cookie,我的意思是当登录 app.domain.com 时,用户可以编写地址门户。 app.domain.com 在浏览器中,他可以登录吗?

预先感谢您的所有回复。

4

1 回答 1

0

如果我没记错的话,默认情况下,您的每个项目中都会有一个默认连接字符串它将是connectionStringName="DefaultConnection"

你会web.config在我的项目中找到它

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

设置两个项目中通用的 DefaultConnection 连接字符串,以便您可以为两个项目设置相同的连接字符串

于 2014-01-07T07:42:35.327 回答