Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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_Session - Fatal编程技术网

是否应在ASP.Net页面加载时检查会话?

是否应在ASP.Net页面加载时检查会话?,asp.net,session,Asp.net,Session,页面加载,作为一个由两个单词组成的句子,表示加载页面时,表示加载所有元素时 假设我有一个名为Ask.aspx的页面,该页面只允许已登录的用户使用,因此从技术上讲,我将编写如下内容: if(Session["id"]==null) Response.Redirect("Login.aspx"); 这意味着,我在页面加载后测试会话,理论上,我认为这听起来是错误的,现在我当然不会注意到它,它会很快,我会尝试访问页面,然后我被重定向到Login.aspx,但是。。。在页面加载方法上测试会话是否

页面加载,作为一个由两个单词组成的句子,表示加载页面时,表示加载所有元素时

假设我有一个名为
Ask.aspx
的页面,该页面只允许已登录的用户使用,因此从技术上讲,我将编写如下内容:

if(Session["id"]==null)
    Response.Redirect("Login.aspx");
这意味着,我在页面加载后测试会话,理论上,我认为这听起来是错误的,现在我当然不会注意到它,它会很快,我会尝试访问页面,然后我被重定向到Login.aspx,但是。。。在页面加载方法上测试会话是否正确

是页面生命周期的一部分。当服务器加载页面时调用它,而不是当客户端加载页面时调用它

所以这是检查会话变量的正确位置

您实际上是在说:在我将页面发布回客户端之前,请检查我是否为该会话设置了
ID
属性。。。如果我没有-告诉客户端重定向到Login.aspx页面

这是做这件事的正确方法

我建议你也读一下。它与
Response.Redirect
的区别在于,在
Server.Transfer
中,服务器本身“重定向”到另一个页面,并将新页面的结果输出回客户端(客户端不知道)。这是页面生命周期的一部分。当服务器加载页面时调用它,而不是当客户端加载页面时调用它

所以这是检查会话变量的正确位置

您实际上是在说:在我将页面发布回客户端之前,请检查我是否为该会话设置了
ID
属性。。。如果我没有-告诉客户端重定向到Login.aspx页面

这是做这件事的正确方法


我建议你也读一下。它与
Response.Redirect
的区别在于,在
Server.Transfer
中,服务器本身“重定向”到另一个页面,并将新页面的结果输出回客户端(客户端不知道)。如果您试图限制对特定页面的访问,您最好使用表单身份验证

它的设置相当简单,并且允许在将请求传递到asp.net管道之前检查凭据。在您所做的工作中,在请求被拒绝之前,您的页面将经历整个生命周期(控件被渲染并绑定到数据、访问数据库、调用web服务等)。根据您的情况,这可能成本高昂,而且无法很好地扩展


编辑:您还可以在global.asax中连接到
acquisiteRequestState
事件。这也将节省整个页面生命周期。

如果您试图限制对特定页面的访问,最好使用表单身份验证

它的设置相当简单,并且允许在将请求传递到asp.net管道之前检查凭据。在您所做的工作中,在请求被拒绝之前,您的页面将经历整个生命周期(控件被渲染并绑定到数据、访问数据库、调用web服务等)。根据您的情况,这可能成本高昂,而且无法很好地扩展

编辑:您还可以在global.asax中连接到
acquisiteRequestState
事件。这也将节省整个页面生命周期