会话["用户"]有时在ASP.NET应用程序

时间:2017-05-26 11:43:12

标签: c# asp.net session

在我的登录页面中,用户输入他的用户名和密码。如果凭证有效,那么我"保存"这个用户在Session变量中。

在每一页上,在Page_Load事件中,我正在检查他的权利。如果已保存用户的会话为空,则应用程序会将其重定向到登录页面。在大多数情况下,用户不为空,但有时会在使用应用程序时丢失会话。

我的login.aspx.cs:

protected void btn_logIn_Click(object sender, EventArgs e)
{
      string username =  txt_user.Text;
      string pass= txt_pass.Text;
      if (checkUser(username ,pass)==true)
      {
          User loggedIn=new User();
          loggedIn=GetUser(username);
          Session["user"]=loggedIn;
          Response.Redirect("page.aspx",false);
      }
 }

protected void Page_Load(object sender, EventArgs e)
{
      User loggedIn=(User)Session["user"];
      if (loggedIn=!null)
      {
           Response.Redirect("Index.aspx",false);
      }

 }

其他.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
      User loggedIn=(User)Session["user"];
      if (loggedIn==null)
      {
           Response.Redirect("login.aspx",false);
      }
      else 
      {
           //Checking his rights...
      }
 }

的Web.config

<sessionState mode="InProc" timeout="20"></sessionState>

BTW 在localhost上它完美无缺。发布应用程序后,会发生这种情况。

编辑:经过进一步测试,我看到了奇怪的结果。 例如,当我的用户返回到登录页面时,因为他不是&#34;在会话中,他可以在按下F5(刷新页面)几次后返回Entry页面(参见login.aspx.cs,为什么会这样)。

是什么导致了这个问题?看起来会话数据仍在这里,但并非总是如此,或者是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

因为你已经设置了

sessionState mode="InProc" timeout="20"

在Web.config中,这意味着在20分钟后,Session将无用。

这是增强网站安全性的好方法。