0

我有一个 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。但它仍然显示相同的错误。

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

提前致谢!

4

2 回答 2

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");
    }
}

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

于 2012-07-10T13:51:44.830 回答
0

要关闭浏览器,您需要一个客户端脚本...服务器端无法执行此操作,因此您可以生成一些 javascript 调用window.close();。对于消息错误,检查 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());
于 2012-07-10T13:49:17.807 回答