3

我有两个页面,一个登录页面和一个page1。用户无法直接导航到 page1,因为它包含页面加载事件的以下代码。用户被重定向到登录页面。

if (Session["role"] == null)
{
    Response.Write("Redirect Not Working");
    Response.Redirect("loginpage.aspx");
}

当用户在 pag1 上单击注销时,他/她在设置后被重定向到登录页面Session["role"]=null。现在在登录页面上,如果用户单击浏览器后退按钮,他/她可以导航到 page1。只有在这种情况下 Response.Redirect("loginpage.aspx");,页面加载事件才不起作用。为什么它不起作用?在这种情况下,我怎样才能让它工作,或者我怎样才能阻止用户访问 page1?

上次我一直无助和关闭,问它一个不同的方式代码来检测任何(所有)浏览器的浏览器后退按钮点击

编辑响应答案:针对注销按钮的代码是

protected void btnLogOut_Click(object sender, EventArgs e)
{
    Session["role"] = null;
    Session.Abandon();
    Response.Redirect("login.aspx");
}
4

4 回答 4

2

您在后面看到的页面可能只是一个缓存版本。

最简单的方法可能是回显元刷新,而不是使用响应重定向。您还需要确保会话清晰。

Session.Abandon();
Response.Write("<meta http-equiv='refresh' content='0';URL='loginpage.aspx'>");
Response.End();

如果用户回击,他们将再次点击该页面并被退回到您希望他们访问的 URL。没有什么能阻止他们不止一次地快速回击或从历史下拉列表中选择 Page1 并获取缓存版本。

于 2012-11-23T17:47:00.947 回答
1

这绝对应该有效,检查你的 Session["role"],我认为它永远不会为空

在注销时执行此操作

Session.Abandon();

'pageoad is not working' 在这种情况下,页面执行的原因不会影响页面周期,Load 事件总是在页面执行时触发。

所以,如果 Page_Load 有时不运行,那是因为页面被缓存并且没有在服务器上执行。该页面可以缓存在浏览器中、沿途某处的路由器中,或者使用服务器端页面缓存在服务器上。

如果您没有为页面启用服务器端页面缓存,它会缓存在浏览器或网络中。您可以使用缓存设置来尝试消除这种情况:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

这将防止页面在正常情况下被缓存。(还要检查您的浏览器是否处于离线模式,然后它将使用缓存中的任何内容,而不管它的可缓存性设置如何。)

于 2012-11-23T17:46:45.483 回答
0

你能试试这样的吗

if (Session["role"] == null)
{
    Response.Write("Redirect Not Working");
    Response.Redirect("~/loginpage.aspx");
}

确保在注销时重置Session["role"] = null因为此值将在 Web 会话期间持续存在

于 2012-11-23T17:40:06.050 回答
0

在我看来,您需要删除 Session["role"] 值并将其设置回 null。当用户注销时,我认为您没有清除会话值,因此当他们浏览回您的页面加载时,仍然认为他们具有有效的登录会话。

测试是否是这种情况的一种简单方法是在 if 块中放置一个断点,然后检查 Session["role"] == null。如果你从来没有打过那个断点,你就知道这个角色不是空的,而且他们在技术上仍然是“登录”的。

于 2012-11-23T17:40:45.567 回答