繁体   English   中英

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

[英]How to share session between a MVC project and a WCF project?

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

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

另外,我想共享身份验证机制,这就是说,我只希望使用FormAuthentication在MVC项目上对用户进行一次身份验证,并在不涉及任何其他技术的情况下让WCF知道何时对用户进行身份验证。

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

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

谢谢你的任何信息

如果WCF层位于同一应用程序池中,则可以检查ASPXAuth cookie(可配置的Forms Auth cookie名称),并且可以使用FormsAuthentication类/命名空间中的方法对cookie进行解码,以使用户进入WCF层。

如果您将表单身份验证cookie配置为域cookie,则您可以将WCF层托管在其他应用程序池/ iis站点中,只要它与主站点位于同一个域中即可。 两个站点都将接收该cookie。

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

(可选)您也可以通过在WCF层中创建登录方法并在WCF站点中创建Forms Cookie来自己创建Cookie。 但是,注销主要站点不会注销Web服务,因此,当用户注销主要站点时,您必须在Web服务层上调用注销,反之亦然。

如果您将站点配置为在url模式下使用Forms Auth,则无需使用cookie即可进行身份验证,但随后必须在每个URL中传递FormsAuth票证。

关于共享会话数据,可以将ASP.Net会话状态配置为基于数据库而不是基于进程。 这样,ASP.Net将为您将会话数据存储在数据库中,您无需自己进行操作。 https://support.microsoft.com/en-us/kb/317604#bookmark-3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM