Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FormsAuthentication如何跨请求上下文持久化会话,以及持久化了哪些信息?_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# FormsAuthentication如何跨请求上下文持久化会话,以及持久化了哪些信息?

C# FormsAuthentication如何跨请求上下文持久化会话,以及持久化了哪些信息?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,因此,我调用FormsAuthentication.SetAuthCookie(model.UserName,true)并重定向到[Authorize]品牌操作。现在HttpContext.Current.User.Identity是一个FormsIdentity,它的属性告诉我我确实登录了。太好了 现在我重新建模数据库,删除表并重新生成它们。FormsAuthentication保留的名称已不存在。但是当我刷新安全的网站时,愚蠢的逻辑仍然在向我打招呼:Hello UserName。可以那很酷

因此,我调用
FormsAuthentication.SetAuthCookie(model.UserName,true)
并重定向到
[Authorize]
品牌操作。现在
HttpContext.Current.User.Identity
是一个
FormsIdentity
,它的属性告诉我我确实登录了。太好了


现在我重新建模数据库,删除表并重新生成它们。FormsAuthentication保留的名称已不存在。但是当我刷新安全的网站时,愚蠢的逻辑仍然在向我打招呼:Hello UserName。可以那很酷

FormsAuthentication显然与我的数据存储无关。它是否在进程中存储会话信息?还是将所有相关数据编码到身份验证票证中,并让客户端将其保存在cookie中


最后,门票是否与我的会员平台绑定?或者
HttpContext.Current.User.Identity.Name是否只是一个任意值?

所有相关数据都存储在身份验证票证中,并保存在客户端的cookie中。HttpContext.Current.User.Identity.Name也存储在另一个cookie中。您可以通过单击查看页面信息,然后单击安全性来查看firefox中的cookies。你会看到2块饼干。其中一个是.ASPXAUTH(负责身份验证),另一个是.ASPXROLES(负责成员身份)。

所有相关数据都存储在身份验证票证中,并保存在客户端的cookie中。HttpContext.Current.User.Identity.Name也存储在另一个cookie中。您可以通过单击查看页面信息,然后单击安全性来查看firefox中的cookies。你会看到2块饼干。其中一个是.ASPXAUTH(负责身份验证),另一个是.ASPXROLES(负责成员身份)。

使用默认表单身份验证配置,成功登录后会向客户端发送cookie。(有无cookieless选项)

每次在身份验证后收到后续请求时,FormsAuthenticationModule类都会从身份验证cookie中检索身份验证票证,对其进行解密,计算哈希值,并比较MAC值,以帮助确保cookie未被篡改

您看到的是FormsAuthenticationModule发现请求有一个cookie

下面的链接是我刚才描述的过程的非常详细的概述。活动图对于理解每个请求发生了什么特别重要

我希望这有帮助


Chris

使用默认的表单身份验证配置,成功登录后会向客户端发送cookie。(有无cookieless选项)

每次在身份验证后收到后续请求时,FormsAuthenticationModule类都会从身份验证cookie中检索身份验证票证,对其进行解密,计算哈希值,并比较MAC值,以帮助确保cookie未被篡改

您看到的是FormsAuthenticationModule发现请求有一个cookie

下面的链接是我刚才描述的过程的非常详细的概述。活动图对于理解每个请求发生了什么特别重要

我希望这有帮助


Chris

是web.config中指定的会话提供程序吗?不是,先生。只有成员资格提供程序。删除成员资格表后,您是否尝试对角色进行授权?@dtryon:实际上,我还没有实现任何角色。web.config中没有定义角色提供程序,我也没有对其进行授权。“但是当我刷新安全网站时…”这里有很多事情在起作用。。。默认情况下,会话为“inproc”,因此,如果您不重新启动web服务器(回收应用程序池,适用于您测试的任何服务器),则先前发布的cookie的会话ID在超时之前仍然有效。我怀疑,如果您同时重新启动服务器,您将看到它按预期工作。web.config中是否指定了会话提供程序?否,先生。只有成员资格提供程序。删除成员资格表后,您是否尝试对角色进行授权?@dtryon:实际上,我还没有实现任何角色。web.config中没有定义角色提供程序,我也没有对其进行授权。“但是当我刷新安全网站时…”这里有很多事情在起作用。。。默认情况下,会话为“inproc”,因此,如果您不重新启动web服务器(回收应用程序池,适用于您测试的任何服务器),则先前发布的cookie的会话ID在超时之前仍然有效。我怀疑如果你也重新启动你的服务器,你会看到它按预期工作。如何处理反欺骗?难道不需要一些服务器端支持吗?我不知道他们使用的确切算法,但cookies中的数据是以某种方式编码的,或者至少是加扰的。是的,它是加密的(可配置的)。有关详细信息,请参见我的答案,但以下是重要部分:“加密表单身份验证票证。已创建的第二个字节数组使用FormsAuthentication类的Encrypt方法进行加密。Encrypt方法在内部使用machineKey元素上的decryption和decryptionKey属性指定的算法和密钥。默认情况下,ASP.NET 1.1版使用3DES算法。ASP.NET 2.0版默认使用Rinjdael(AES)算法。“如何处理反欺骗?是否需要一些服务器端支持?我不知道他们使用的确切算法,但cookie中的数据以某种方式进行编码或至少进行了加密。是的,它是加密的(可配置的)。有关详细信息,请参阅我的答案,但这里有一个重要部分:“加密表单身份验证票据。已创建的第二个字节数组使用