我在asp.net c#中写了一个登录页面而不是使用登录控件。 我可以创建帐户并以用户身份登录。
需要登录的页面有一个单独的母版页。
我想检查用户是否登录了主页page_preinit函数
但问题是在母版页之前调用子页面事件函数,所以我可能会遇到像子页面中的会话过期之类的问题,然后才能在母版页中检查它。反正在这周围?
确定发现了我正在寻找的事件。列表中的第二个 http://msdn.microsoft.com/en-us/library/dct97kc3.aspx
答案 0 :(得分:2)
您使用的是FormsAuthentication吗?你不应该担心这个。在将请求传递给您的Page对象之前,在IIS管道中进行身份验证,如果用户的身份验证失败,它将永远不会到达,而是被重定向到登录页面。
如果页面受FormsAuthentication保护,则未经身份验证的用户不应调用任何PreInit代码。
答案 1 :(得分:0)
这是滚动您自己的身份验证是一种冒险方法的众多原因之一。有很多角落案例。
由于您将用户ID存储在Session对象中,因此一旦会话到期,您将无法再访问它;如果它来自子页面或主页面则无关紧要。
不使用Session,最好使用cookies。您可以在cookie本身使用很长时间,登录到期时间以cookie的值编码或保存在数据库中,以cookie的值为键。这样,会话可能会过期,但您仍然可以刷新它或采取其他一些操作,而不仅仅是报告错误。