c# - WebSecurity.IsAuthenticated 如何检查您是否已登录?

标签 c# asp.net .net asp.net-mvc asp.net-mvc-4

这可能是个愚蠢的问题,但我在 Google 上搜索得很辛苦,却找不到答案。

我正在创建一个数据库位于另一个大陆的网站,因此速度是一个至关重要的问题。

据我了解,

 WebSecurity.Login(form.userName, form.password))

首先检查它最初设置的数据库,如果用户名和密码正确则让您登录。<​​/p>

现在对于我正在编写的每个后端函数,我都坚持

[Authorize]

属性和一个

if (WebSecurity.IsAuthenticated)
{ .... }

在执行任何操作之前。那么 WebSecurity.IsAuthenticated 是否检查数据库以检查它是否已登录?出于速度原因,我只需要知道。

另外,将 [Authorize] 和 WebSecurity.IsAuthenticated 放在每个后端方法中是否多余?

感谢任何帮助和意见

最佳答案

So does the WebSecurity.IsAuthenticated check the database at all to check if it is logged in or not?

不,它只是检查当前请求中的主体对象是否将身份验证标志设置为 true。

通常principal object是由认证模块设置的,很少有不同的模块。大多数使用 cookie 来保存经过身份验证的用户的信息(例如 FormsSessionAuthentication),如果 cookie 存在且有效,模块会为请求设置主体你可以通过调用:

HttpContext.Current.User

在代码的任何方法中(假设调用是从设置了 HttpContext.Current 的网络应用程序发出的)。

一些身份验证模块可以依赖其他身份验证因素,例如 Windows 身份验证依赖于 NTLM/Kerberos 协议(protocol),而后者又依赖于特定的 header 而不是 cookie。

Also is it redundant to put the [Authorize] and WebSecurity.IsAuthenticated in EVERY backend method

是也不是。

“每个后端方法”很可能是指 MVC 应用程序中的 Controller /操作方法。如果是这样,那么,您不必在 Controller /操作方法中重复两者。

但在后端的任何其他不是 Controller /操作的方法中,WebSecurity.IsAuthenticated 仍然有效,而 Action 属性则无效。

因此,如果“每种方法”的字面意思是每种 可能的方法,那么答案是,这两个并不是多余的。一个始终有效,另一个 - 仅在 MVC Controller 中有效。

关于c# - WebSecurity.IsAuthenticated 如何检查您是否已登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32657553/

相关文章:

c# - 什么是 C# 等同于 Java 的 isInstance()?

javascript - Moment JS 日期到 C# 日期

c# - C# 中的日期计算

c# - DllImport 放在哪里?

javascript - 如何将 Bootstrap 工具提示应用于动态生成的表

c# - 异常处理和异步异常处理的区别

c# - 在 Site.Master 页面中单击按钮会触发内容页面中的单击事件。

c# - try catch 和 finally block 的执行顺序

c# - 按公共(public)属性对不同对象的列表进行排序

.net - 将逗号千位分隔符添加到十进制 (.net)