我有一个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 。但它仍然显示相同的错误。
如何重定向或显示“会话超时!再次访问”并关闭浏览器的消息。
提前致谢!
答案 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());