如何在ASP.NET中的Session TimeOut之后重定向或关闭浏览器?

时间:2012-07-10 13:39:09

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

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

在PageLoad上:

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

        }

在SearchButtonClick事件:

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

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

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

提前致谢!

2 个答案:

答案 0 :(得分: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");
    }
}

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

答案 1 :(得分:0)

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

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());