在我的ASP.NET Web应用程序中,如果用户存在于数据库中(我们第一次在会话中保存用户详细信息之后),我希望每次用户尝试从应用程序获取页面时进行检查.我尝试使用global.asax中的Application_AuthenticateRequest事件来检查每个请求,但此事件中不存在会话.我需要一个建议,我可以放置我的授权逻辑,我仍然可以使用会话数据(以减少数据库访问).
你听起来好像在"滚动自己的"身份验证系统.
我将研究使用ASP.NET内置的Forms身份验证系统,该系统通常与ASP.NET 成员资格提供程序一起使用.SQL Server已经存在内置提供程序,您可以通过继承System.Web.Security.MembershipProvider基类来创建自己的成员资格提供程序.
实际上,一旦客户端成功通过身份验证,ASP.NET成员资格提供程序通常会在客户端的浏览器中设置客户端cookie(也称为身份验证票证).每次后续页面请求都会将此cookie返回给Web服务器,从而允许ASP.NET以及您的代码确定用户是谁,通常只需要一行代码:
string username = HttpContext.Current.User.Identity.Name;
// The above gets the current user's name.
if(HttpContext.Current.User.Identity.IsAuthenticated)
// Do something when we know the user is authenticated.
Run Code Online (Sandbox Code Playgroud)
然后,您不需要在Session状态中存储任何内容.当然,如果您想将特定于用户的数据存储在会话变量中(即用户数据可能不是用户身份验证的一部分,也许是用户最喜欢的颜色等),那么无论如何都可以将其存储在会话变量(在用户首次通过身份验证后从数据库中检索它).会话变量可以基于用户的名称(假设唯一名称)进行存储,并使用类似于上面的代码进行检索,该代码获取当前用户的名称以访问正确的会话对象.
使用内置表单身份验证还允许您使用web.config中的简单声明性代码"保护"您网站的某些区域免受未授权用户的攻击,例如:
<authorization>
<deny users="?"/>
</authorization>
Run Code Online (Sandbox Code Playgroud)
将上述内容添加到"主"web.config将确保未授权用户无法访问您的任何页面(尽管您实际上可能永远不会这样做 - 它只是作为示例).将ASP.NET 角色提供程序与成员资格提供程序结合使用,可以更加精确地了解谁可以访问或不能访问您网站的各个部分.
小智 1
您可以使用 SqlMembershipProvider(如果您不使用 MSSQL,则可以使用自定义提供程序)并拒绝整个应用程序中未经身份验证的用户(登录页面除外)。此检查将仅限于登录时间,因为身份验证票证将存储在会话中或作为用户计算机上的 cookie。
更多详细信息,请参阅如何:在 ASP.NET 2.0 中使用成员资格和 检查 ASP.NET 2.0 的成员资格、角色和配置文件
| 归档时间: |
|
| 查看次数: |
5967 次 |
| 最近记录: |