我们托管在 AppHarbor 上,并使用他们的 memcacher 插件,如他们的文档中所述进行设置:
<sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom"
customProvider="MemcachedSessionProvider" xdt:Transform="Insert">
<providers>
<add name="MemcachedSessionProvider"
type="MemcachedProviders.Session.SessionStateProvider,MemcachedProviders"
dbType="none" />
</providers>
</sessionState>
我们看到的问题只能通过以下方式重现:
- 在 iOS Safari(或 twitter iphone 应用程序的内置 webkit 浏览器)中通过 twitter 缩短 URL 到 appfail.net:http://t.co/6tRXopEJ
- 单击我们的“运行演示”按钮,然后使用我们的演示帐户自动登录用户。
此时服务器发出302重定向到一个无效的URL,例如: http://appfail.net/(F(FckQ4UX0zD_WSxk_adpkk3YysHsYQS4TSVpljxmswyBqEAZ1q-YhW4KePrpYQfJ4KlLGaiyje_TbpeSARVyI8LioQ7Jp5EIc0Zm9u99IqRRkkoMh_wr-jrsrvje4J7KpUt1n87xEMzMeqHzpMz9ksm42IqNnf3F9B6GBwrnuA5EY_YsV0))/Applications
该 url 似乎包含一个 SessionID,其格式与 IIS 用于无 cookie 会话的格式相同。这也是有道理的,因为 IIS 可以配置为使用基于 UserAgent 的无会话 cookie - 因此它为什么只在移动 safari 中重现(尽管我不确定为什么它只发生在 t.co/ 重定向中,而不是什么时候发生直接加载页面)
奇怪的是——我们关闭了无 cookie 会话!正如您在上面的会话状态中看到的那样。我也尝试过设置 'cookieless="UseCookies"'... 不走运!
我添加了日志记录,甚至验证了系统在运行时配置为“UseCookies”。
所以,我想知道我们怎么可能只使用 RedirectToAction() 将用户重定向到无 cookie 的 URL?
我想知道这是否与自定义会话状态提供程序——MemcachedProvider 有关?还是更基本的东西?
谢谢山姆