【问题标题】:Session saved in handler cannot be accessed in aspx file无法在 aspx 文件中访问保存在处理程序中的会话
【发布时间】:2014-08-27 17:12:01
【问题描述】:

我正在我的网络应用程序的第一页上实现验证码,即。在登录页面上。验证码值在通用处理程序中设置,需要在 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 中保存的会话参数。不知道为什么,因为我在页面加载中重置会话,然后控制转到设置会话参数的处理程序,然后在登录单击时,我想用键入的值验证 Handler 中设置的会话参数。但不知何故,我无法访问会话参数。我收到错误“对象引用未设置为对象的实例”。

我需要重置我的 SessionId,因为审计公司要求我这样做。关于如何实现这两件事的任何建议:重置 SessionID 和使用验证码?

【问题讨论】:

  • 我也有同样的情况。在登录阶段,我需要保留一些元素(通常是用户登录),但是 sessionId 的重新生成会终止我的会话。有没有办法达到审计的预认证?

标签: c# asp.net session captcha generic-handler


【解决方案1】:

确保会话重置代码仅在您首次加载页面时调用,而不是在单击登录按钮时在回发时调用。 Page_Load 应该如下所示:

private void Page_Load(object sender, System.EventArgs e)
{
  if(!IsPostBack)
  {
    Session.Abandon();
    Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
  }
}

【讨论】:

  • 是的,我已经解决了这个问题,但会话仍在清除中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多