这是我之前发布的一个问题的后续内容,但当时还不清楚。我希望我现在可以更清楚了。
我使用ASP.NET和C#在登录所有安全页面后验证用户。我应该能够在不触及web.config文件的情况下执行此操作,因此请避免任何涉及编辑web.config文件的此类解决方案。经过一些调试后,我发现用户登录时,安全页面可以被任何其他人(无需登录)从另一台计算机访问,或者只是在同一台计算机上,但在不同的浏览器中。这显然很糟糕,所以我想知道如何使用有效用户的初始会话ID来保护所有后续page_load来自其他具有直接页面路径但没有有效登录的用户。
目前,我在所有安全page_load函数中进行的唯一检查是检查另一个MySession.GetSessionId()==null
。如何使用GetSessionId()
返回的此值来检查登录时的初始会话ID值是什么?
答案 0 :(得分:4)
每个用户和每个用户代理的会话已经是唯一的。如果多个用户都访问同一会话,则会话创建和设置逻辑中肯定存在错误,可能是设置用户ID的位置。我的通灵调试告诉我:
static
字段中存储对会话的引用,其值由所有用户共享但是,如果没有显示代码,就很难调试。
答案 1 :(得分:2)
仅仅依靠sessionID不是要走的路!仅通过检查sessionID,您就没有用户的任何信息。
将登录用户的userID存储在会话中。 如果有有效的用户ID,请检查安全页面。
不是最优雅的解决方案,但这种方式无需更改为web.config。
我怀疑网站中的身份验证/授权逻辑没有充分利用asp.net附带的会员功能。
也许你可以通过指出提供长期和安全的解决方案来获得一些分数。
答案 2 :(得分:0)
快速&肮脏的解决检查伪代码
登录页面(Login.aspx)
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
}
在安全页面上(Secure.aspx)
PageLoad(){
if (Session["userID"]!="1")
// Log this attempt somewhere
Response.Redirect("~/NotAuthorized.aspx");
}
我强烈建议你反对这种做法&实施适当的会员制度,因为你必须在每个&每个页面,如果不是,如果以后将很多管理员角色添加到网站中,您仍然会遇到麻烦。
达明。