【问题标题】:How to Redirect or Close Browser after Session TimeOut in ASP.NET?如何在 ASP.NET 中的会话超时后重定向或关闭浏览器?
【发布时间】:2012-07-10 13:39:09
【问题描述】:

我有一个 Catcha 值(安全代码),它存储在 PageLoad 的 Session 中,当用户单击搜索按钮时将使用它。如果用户处于空闲状态超过 20 分钟,则 Session 的值将过期。当用户点击搜索按钮时。它会引发错误“对象引用未设置为对象的实例”。

在页面加载时:

 if (!IsPostBack)
        {
            Session["CaptchaImageText"] = new RandomGen().GenerateRandomCode();

        }

在 SearchButtonClick 事件中:

if (SecurityCodeTextBox.Text.Trim() == Session["Captcha"].ToString())
        {
            return true;
        }
        else
        {
            return false;
        }

这里出现错误“对象引用未设置为对象的实例”。 我还检查了 Session["Captcha"]!= null。但它仍然显示相同的错误。

如何重定向或显示“会话超时!再次访问”消息并关闭浏览器。

提前致谢!

【问题讨论】:

标签: asp.net session-timeout object-reference


【解决方案1】:

您的代码看起来与您的 Session 变量命名不一致(我是这些常量的坚定支持者)。

话虽如此,处理你的情况最简单的方法是

private void Page_Load(object sender, System.EventArgs e)
{     
    Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5)); 
    if( string.IsNullOrEmpty(Session["Captcha"] as string) ) 
    {
         Server.Transfer("RedirectPage.aspx");
    }
}

这将导致会话到期时页面重定向。

【讨论】:

    【解决方案2】:

    要关闭浏览器,您需要一个客户端脚本...服务器端无法执行此操作,因此您可以生成一些调用window.close(); 的javascript。对于消息错误,检查 Session[] 是否不为空,如果你调用 this 的某个方法并且它为空,你会得到这种异常。试试这样的:

    if (Session["Captcha"] == null)
    {
       Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Session Timeout! Visit again.'); window.close();", true);
       return false;
    }
    
    return (SecurityCodeTextBox.Text.Trim() == Session["Captcha"].ToString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多