如何在MVC项目和WCF项目之间共享会话

本文关键字:项目 之间 共享 会话 WCF MVC | 更新日期: 2023-09-27 18:02:32

我有一个angular-WebAPI-MVC-WCF解决方案。

我想在MVC和WCF项目之间共享用户会话。这可能吗?

另外,我想分享认证机制,我的意思是,我只希望在MVC项目中使用FormAuthentication对用户进行一次身份验证,并让WCF知道用户何时进行身份验证,而不涉及任何其他技术。

我有另一个解决方案,其中MVC和WCF应用程序驻留在同一个项目(dll),并在该上下文中,我可以共享身份验证和会话数据。
所以,为了共享会话,我应该将svc文件从WCF移动到MVC项目中吗?这是唯一的办法吗?

所有的项目共享相同的数据库,但我想解决这个问题,而不必在数据库级别存储会话数据。

如何在MVC项目和WCF项目之间共享会话

如果你的WCF层是在同一个应用程序池,你可以检查ASPXAuth cookie(表单Auth cookie的名称是可配置的),你可以使用方法在FormsAuthentication类/命名空间解码cookie,以获得用户在你的WCF层。

如果你将表单的认证cookie配置为域名cookie,那么你可以在一个不同的应用程序池/iis网站上托管你的WCF层,只要它与你的主站在同一个域名上。两个站点都会收到cookie。

cookie驱动表单验证。如果FormsAuthenticationModule在请求cookie集合中看到这个cookie,它会从cookie中检索用户(解密它)并创建一个经过身份验证的会话。

可选的,你也可以通过在WCF层创建一个登录方法来创建cookie,并让它在WCF站点中创建表单cookie。然而,登出主站点不会登出Web服务,所以当用户登出主站点时,你必须在Web服务层调用log out,反之亦然。

如果你将网站配置为在url模式下使用FormsAuth,你可以在没有cookie的情况下进行身份验证,但是你必须在每个url中传递formauth票…

为了共享会话数据,可以配置ASP。Net会话状态是基于数据库的,而不是基于进程的。通过这样做,ASP。Net将为您将会话数据放入数据库中,您不需要自己做。https://support.microsoft.com/en-us/kb/317604 bookmark-3