2

页面加载,作为2个单词的一句话,意味着页面加载时,意味着所有元素都加载完毕。

假设我有一个名为 的页面Ask.aspx,并且该页面只允许已登录的用户使用,所以从技术上讲,我会写这样的内容:

if(Session["id"]==null)
    Response.Redirect("Login.aspx");

这意味着,我在页面加载后测试会话,理论上,我认为这听起来不对,现在我当然不会注意到它,它会很快,我会尝试访问页面,然后我重定向到 Login.aspx,但是......测试页面加载方法上的会话是否正确?

4

2 回答 2

3

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

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

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

这是这样做的正确方法......

我建议您也阅读有关Server.Transfer的信息。它与服务器之间的区别在于Response.Redirect服务器Server.Transfer本身“重定向”到另一个页面并将新页面的结果输出回客户端(客户端不知道)。

于 2012-12-23T13:49:24.733 回答
1

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

http://support.microsoft.com/kb/301240

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

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

于 2012-12-23T13:52:54.923 回答