2015-05-05 102 views
5

我不使用会话,所以我将它与所有不需要的HTTP模块一起删除。AntiForgeryToken是否需要会话状态?

我有时会收到此错误:System.Web.Mvc.HttpAntiForgeryException: The anti-forgery token could not be decrypted. If this application is hosted by a Web Farm or cluster, ensure that all machines are running the same version of ASP.NET Web Pages and that the <machineKey> configuration specifies explicit encryption and validation keys. AutoGenerate cannot be used in a cluster.

或者这一个:System.Web.Mvc.HttpAntiForgeryException: The provided anti-forgery token was meant for a different claims-based user than the current user.

当我启动了会话,它的工作原理。

所以问题是:csrf的东西是否依赖于会话状态?

+0

您确定您的共享托管供应商仅在一台Web服务器上托管您的应用程序吗? – lowleveldesign

+0

@lowleveldesign我不确定。但相当确信,因为主机名在我的日志中始终是一样的,就像IP一样。 –

+0

以及设置csrf cookie的域名?你在使用你独特的子域名吗?否则,您的应用程序可能会从运行在同一根域中的其他.NET应用程序接收Cookie。 – lowleveldesign

回答

6

防伪造令牌不需要ASP.NET会话。该令牌存储在一个隐藏的表单字段中,并存储在一个cookie中,与cookie会话分开(您可以找到详细信息here)。此外,当防伪标记无效时,会抛出异常,因此看起来您的问题看起来不像防伪标记。也许记录一个提琴手会议,将其附加到一个新的SO问题,我们应该能够更好地指导你。

+0

当你遇到“双重登录”或它是一个单独的问题时,总会抛出异常? – lowleveldesign

+0

我接受这个答案,因为它直接回答了原始问题。但问题仍然存在,所以我会按照您的建议打开一个单独的问题。 –