gpt4 book ai didi

asp.net-mvc-4 - Azure 缓存无法跨 VIP 交换保留 session 状态?

转载 作者:行者123 更新时间:2023-12-02 07:00:57 24 4
gpt4 key购买 nike

作为这篇文章的后续:Enabling co-located Session Caching in an Azure Cloud Service - 我尝试将 session 状态存储在 Azure 缓存中,以保留 VIP 交换之间的 session 。引用自答案:

To fix this problem, I'd like you to try the new Cache Service (Preview). In this way you create dedicate cache for your subscription so that you can use them across cloud service deployments, virtual machines and websites.

我已经设置了一个 Azure 缓存(预览版)实例,在 web.config 中使用了其终结点和主访问 key ,并部署到了我的 Azure 云服务暂存槽。

然后我使用表单例份验证登录,并重新部署到同一插槽。我的凭证被保留了!很高兴看到这一点。

但是后来我 VIP 切换到 Production,以相同的方式登录到生产实例,重新部署到 Staging,VIP 再次切换,然后刷新,期望保持登录状态,但它不起作用 - 我的 session 丢失了在制作和舞台上。

我已按照此处的说明进行操作:

http://www.windowsazure.com/en-us/manage/services/cache/net/how-to-in-role-cache/#getting-started-cache-role-instance

这可能是什么原因造成的?没有抛出异常 - 我的访问 key 有效(通过给它一个伪造的 key 并得到异常来测试)...我不确定发生了什么。 web.config 中的配置部分:

 <sessionState mode="Custom" customProvider="AFCacheSessionStateProvider" xdt:Transform="Insert">
<providers>
<add name="AFCacheSessionStateProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" applicationName="AFCacheSessionState"/>
</providers>
</sessionState>

还有:

<dataCacheClient name="default">
<autoDiscover isEnabled="true" identifier="mysite.cache.windows.net" />
<securityProperties mode="Message" sslEnabled="false">
<messageSecurity authorizationInfo="{my key}" />
</securityProperties>
</dataCacheClient>

至于超时策略 - 我将其设置为在启用驱逐的情况下永不过期。我是少数用户之一,缓存将 cookie 存储在 128MB 的空间中,所以我认为这与过期无关。

我还注意到在 docs ,没有像我上面那样的 applicationName 条目。我尝试删除它并重新测试,但无济于事 - 我的 Prod session 在 VIP 交换时仍然丢失。

我做错了什么?

更新:

来自微软forum post :

I was able to reproduce the issue. I am investigating.

最佳答案

表单例份验证不基于 session 状态。它仅依赖于客户端 cookie。 Cookie 使用machineKey section of web.config 中指定的 key 进行加密和验证。 。默认配置是:

<machineKey validationKey="AutoGenerate,IsolateApps"  
decryptionKey="AutoGenerate,IsolateApps"
validation="SHA1" decryption="Auto" />

AutoGenerate意味着每台物理机都有自己的decryptionKey。生产虚拟机生成的 Cookie 不会被临时虚拟机接受。

VIP 交换后,旧生产虚拟机设置的所有 cookie 将被新生产虚拟机(前暂存虚拟机)拒绝,导致所有用户注销。

您需要显式指定 machineKey 值,以强制 Forms Auth 生成对新旧生产 VM 都有效的 cookie(请参阅 How To: Configure MachineKey, Web Farm Deployment Considerations section )。

检查此在线工具以生成机器 key 部分:http://aspnetresources.com/tools/machineKey .

UPD:Manage Deployments in Windows Azure/Managing ASP.NET machine keys for IIS中有相关注释:

Windows Azure automatically manages the ASP.NET machineKey for services deployed using IIS. If you routinely use the VIP Swap deployment strategy, you should manually configure the ASP.NET machine keys.

关于asp.net-mvc-4 - Azure 缓存无法跨 VIP 交换保留 session 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20987058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com