2015-05-05 48 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

我接受這個答案,因爲它直接回答了原始問題。但問題仍然存在,所以我會按照您的建議打開一個單獨的問題。 –