c# - 在两个 asp.net mvc 应用程序之间共享 cookie

标签 c# asp.net cookies single-sign-on orchardcms

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

我在网站上有两个这样的应用程序:app.domain.com 和 portal.app.domain.com 第一个应用程序是 Orchard cms,我创建了自己的自定义成员(member)提供程序,因此 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 在浏览器中,他仍然可以登录吗?

预先感谢您的所有回复。

最佳答案

如果我没记错的话,在你的每个项目中默认都会有一个默认的连接字符串 它将作为 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 的连接字符串在你的两个项目中都是通用的,这样你就可以为你的两个项目设置相同的连接字符串

关于c# - 在两个 asp.net mvc 应用程序之间共享 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471251/

相关文章:

php - 客户计算机上创建的 cookie 在哪里

c# - 如果使用不同的用户凭据,为什么 Process.Start 会抛出 Win32Exception?

c# - Asp.net cookieless sessionId url位置

c# - 如何在 visual studio 2010 C# 中获取字符串的堆栈内存地址

c# - 如何在 ASP.Net MVC 5 View 中获取 ApplicationUser 的自定义属性值?

通过 "container.find()"检索 Id 值时,Javascript 返回 false

javascript - 使用 JavaScript 或 jQuery 存储跨页面持久存在的数据

java - 在 Spring MVC Controller 中创建的 cookie 上设置 http-only

c# - 从 C# 中的句子中修剪太长的单词?

c# - 读取第一个和最后一个字母后解析c#中的字符串