我正在我的网络应用程序的第一页上实现验证码,即。在登录页面上。验证码值在通用处理程序中设置,需要在login.aspx页面中进行访问以进行验证。
验证码工作得很好,直到我每次用户进入登录页面时都添加了重置会话ID的代码。我的页面加载甚至是login.aspx:
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
}
}
我尝试使用此代码来获取新的sessionId:
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
SessionIDManager manager = new SessionIDManager();
string newID = manager.CreateSessionID(Context);
bool redirected = false;
bool isAdded = false;
manager.SaveSessionID(Context, newID, out redirected, out isAdded);
}
}
当我重置sessionId时,我无法获取login.aspx中保存在Handler中的会话参数。不知道为什么,因为我在页面加载中重置会话然后控制转到设置了session参数的处理程序,然后在登录时单击我想验证Handler中的Session参数集的类型输入值。但不知何故,我无法访问会话参数。我收到错误“对象引用未设置为对象的实例”。
我需要重置我的SessionId,因为审计公司要求我这样做。关于如何实现这两件事的任何建议:重置SessionID和使用Captcha?
答案 0 :(得分:0)
确保仅在首次加载页面时调用会话重置代码,而不是在单击登录按钮时在回发时调用。 Page_Load
看起来应该是这样的:
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
}
}