Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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# 使用会话ID在安全网页上验证用户_C#_Asp.net_Session_Sessionid - Fatal编程技术网

C# 使用会话ID在安全网页上验证用户

C# 使用会话ID在安全网页上验证用户,c#,asp.net,session,sessionid,C#,Asp.net,Session,Sessionid,这是我之前发布的一个问题的后续,但当时还不清楚。我希望我现在能说得更清楚 我正在使用ASP.NET和C#在登录所有安全页面后验证用户。我应该能够在不接触web.config文件的情况下执行此操作,因此请避免任何涉及编辑web.config文件的此类解决方案。经过一些调试,我发现如果用户登录,任何其他人(无需登录)都可以从另一台计算机访问安全页面,或者只是在同一台计算机上但在不同的浏览器中访问。这显然很糟糕,因此我想知道如何使用有效用户的初始会话ID来保护所有后续页面加载不受具有直接页面路径但没有

这是我之前发布的一个问题的后续,但当时还不清楚。我希望我现在能说得更清楚

我正在使用ASP.NET和C#在登录所有安全页面后验证用户。我应该能够在不接触web.config文件的情况下执行此操作,因此请避免任何涉及编辑web.config文件的此类解决方案。经过一些调试,我发现如果用户登录,任何其他人(无需登录)都可以从另一台计算机访问安全页面,或者只是在同一台计算机上但在不同的浏览器中访问。这显然很糟糕,因此我想知道如何使用有效用户的初始会话ID来保护所有后续页面加载不受具有直接页面路径但没有有效登录名的其他用户的影响


目前,我在所有安全页面加载函数中所做的唯一检查是检查MySession.GetSessionId()==null。如何使用由
GetSessionId()返回的这个值来检查登录时初始会话ID值是什么?

仅仅依赖sessionID是不可取的!仅仅通过检查sessionID,您就没有用户的任何信息

在会话中存储登录用户的用户ID。 然后在安全页面上检查是否存在有效的用户标识

这不是最优雅的解决方案,但这样就不需要更改为web.config

然而,我怀疑网站中的身份验证/授权逻辑没有充分利用asp.net附带的成员资格功能


也许你可以通过指出一个解决方案提供了一个长期和安全的解决方案来获得一些分数。

仅仅依靠sessionID是不可取的!仅仅通过检查sessionID,您就没有用户的任何信息

在会话中存储登录用户的用户ID。 然后在安全页面上检查是否存在有效的用户标识

这不是最优雅的解决方案,但这样就不需要更改为web.config

然而,我怀疑网站中的身份验证/授权逻辑没有充分利用asp.net附带的成员资格功能


也许你可以通过指出out提供了一个长期安全的解决方案来获得一些分数。

会话对于每个用户和每个用户代理来说已经是唯一的了。如果多个用户都在访问同一个会话,那么您的会话创建和设置逻辑中肯定存在错误,很可能是在设置用户ID的地方。我的心理调试告诉我:

  • 所有用户和凭据都被意外地从某种持久性存储设置为相同的值,或者
  • 您将会话引用存储在某个位置的
    静态
    字段中,该字段的值由所有用户共享

但是,如果不显示代码,则很难进行调试。

会话对于每个用户和每个用户代理都是唯一的。如果多个用户都在访问同一个会话,那么您的会话创建和设置逻辑中肯定存在错误,很可能是在设置用户ID的地方。我的心理调试告诉我:

  • 所有用户和凭据都被意外地从某种持久性存储设置为相同的值,或者
  • 您将会话引用存储在某个位置的
    静态
    字段中,该字段的值由所有用户共享

但是,如果不显示代码,则很难调试。

快速脏解决方案。检查伪代码

在登录页面上(login.aspx)

在安全页面上(secure.aspx)

我强烈建议你反对这种做法,实施一个适当的会员制,因为你必须在每个页面上硬编码,否则,如果将来有许多管理员角色被添加到网站上,你仍然会遇到麻烦


Damien.

快速脏液。检查伪代码

在登录页面上(login.aspx)

在安全页面上(secure.aspx)

我强烈建议你反对这种做法,实施一个适当的会员制,因为你必须在每个页面上硬编码,否则,如果将来有许多管理员角色被添加到网站上,你仍然会遇到麻烦


Damien.

使用ASP.Net成员资格和角色。这是为你做的。他们是如何登录的?您如何存储密码?你是如何处理角色的?如果您试图构建自己的身份验证系统以避免编辑web.config,则可能会遇到更多问题。请使用ASP.Net成员身份和角色。这是为你做的。他们是如何登录的?您如何存储密码?你是如何处理角色的?如果您试图构建自己的身份验证系统以避免编辑web.config,您可能会遇到比这更多的问题。从长远来看,手动检查会话对象确实会失败。+1指出了这一点。从长远来看,手动检查会话对象确实会失败。我很感激这些有用的建议,但这并没有回答我提出的问题,或者至少没有回答我的提问意图。每个实例的会话ID都不同,但它们仍然可以登录。我相信我已经找到了解决方案,如果调试成功的话,我会很快在这里发布。我很感激这些有用的建议,但这并没有回答我提出的问题,或者至少没有回答我想问的问题。每个实例的会话ID都不同,但它们仍然可以登录。我相信我已经找到了解决方案,如果调试成功,我会很快在这里发布。我同意,但我正在做我被要求做的事情(我正在接受工作培训)。谢谢你的帮助。如果你的数据库中有一个角色表,你也可以存储管理员的角色ID。我同意,但我正在做我被要求逐字逐句做的事情(我在工作中接受培训)。谢谢你的帮助。如果你的数据库中有一个角色表,你也可以存储管理员的角色ID。
BtnLogin_click()
{
        // Query database to check username/password match
        // If Success store corresponding UserID in session
        Session["userID"]=YourDbValue;   // Say 1 is for administrator, 2 is for user
}
 PageLoad(){
       if (Session["userID"]!="1")
          // Log this attempt somewhere  
          Response.Redirect("~/NotAuthorized.aspx"); 
   }