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
这是个好主意吗?通过设置会话变量对ASP.NET中的用户进行身份验证_Asp.net - Fatal编程技术网

这是个好主意吗?通过设置会话变量对ASP.NET中的用户进行身份验证

这是个好主意吗?通过设置会话变量对ASP.NET中的用户进行身份验证,asp.net,Asp.net,为了在ASP.NET中对用户进行身份验证,我看到了如下代码 if (loginManager.Authenticate(username, password)) { Session["Authenticated"] = 1; } 在随后的请求中,只需检查Session[“Authenticated”]的值是否为1,以确定当前用户是否经过身份验证 这很简单。我的问题是:这与ASP.NET表单身份验证有何不同使用FormsAuthentication类创建一个authenticate co

为了在ASP.NET中对用户进行身份验证,我看到了如下代码

if (loginManager.Authenticate(username, password))
{
    Session["Authenticated"] = 1;
}
在随后的请求中,只需检查
Session[“Authenticated”]
的值是否为1,以确定当前用户是否经过身份验证


这很简单。我的问题是:这与ASP.NET表单身份验证有何不同使用FormsAuthentication类创建一个authenticate cookie,并根据
user.Identity.IsAuthenticated
字段确定是否对用户进行了身份验证

使用会话进行身份验证既不是标准,也不是良好的做法,因为会话是使用通过FormsAuthentication类设置的
SessionID
进行标识的。此类负责维护用户与服务器的会话绑定,可以使用cookie,也可以在禁用cookie的情况下通过重写it用户URL来维护
会话ID
。虽然会话可能丢失或被破坏,但是
SessionID
机制通过加密和检查每个请求来保护。支持这一论点还有许多其他原因。因此,简而言之,我建议使用标准方式。

您应该使用表单身份验证,原因如下:

  • 表单身份验证是microsoft多年来开发的。测试了它的安全性。您的方法从未经过测试,因此您和我都不能确定它是否安全,但表单身份验证是所有人都信任的
  • 人们在会话提前到期时会遇到很多困难
  • 由于许多用户同时访问您的网站,使用会话将导致内存问题
  • 使用表单身份验证更干净、更优雅
  • 为什么不使用许多开发人员使用的方法呢?如果明天有人加入您的团队并帮助您的项目,他可能会错误地理解您的逻辑,并可能危及安全性

  • 如果会话cookie和会话过期是同步的,那么可能没有区别。但情况并非总是如此。仅举一个例子-您将会话存储在ASP.NET的默认值中-InProc。但是由于某种原因,SessionState进程被重新启动、终止、终止,不管怎样——所有会话都消失了。然后,一个用户来到该站点——他有一个有效的身份验证cookie,并且经过身份验证。但无法检索该会话,因此将重新创建为新会话(session.IsNewSession=true)。因此,用户将根据FormsAuthentication进行身份验证,但不会有会话[“authenticated”]=1

    我发现这篇文章在这方面非常有用:

    用户的身份验证令牌和 他的疗程?

    理想情况下,答案应该是否定的。你不应该依赖 会话数据可用于许多用户的安全相关问题 原因之一是关注点的分离。一个标记 处理用户访问权限,另一个处理跨网络存储用户数据 请求。然而,在许多情况下,开发人员选择存储用户的 会话中的访问权限,通常在同时允许 匿名和经过身份验证的访问,经过身份验证的用户具有 与匿名功能/页面相比,他们可以使用更多功能/页面So 而不是在用户的身份验证中存储访问权限令牌 cookie,开发人员选择将用户的访问权限存储在 用户会话(有时是因为被认为是 安全问题——然而,这通常是一个错误的担忧,因为 用户的身份验证令牌可以以非常高的强度进行加密 轻松通过中forms元素的protection属性 web.config)。但是,这假定会话不会在之前过期 身份验证–否则您将留下一个经过身份验证的 您实际上不知道其访问权限的用户,如 存储在现在已结束的会话中。面对这种情况, 许多开发人员认为设置会话就足够了 将超时设置为高于身份验证超时的值,并设置 将窗体身份验证的Expiration滑到true。思想 在此设置中,用户身份验证将首先过期, 使ASP.Net自动处理此问题并重定向用户 登录页面(如web.config中所设置)。如果会话仍然是 大约,它将被更新,如果没有,一个新的将被创建,然后 用户的访问权限将根据其登录设置


    你可以在这本书中找到答案。