在我的登录页面中,用户输入他的用户名和密码。如果凭证有效,那么我"保存"这个用户在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,为什么会这样)。
是什么导致了这个问题?看起来会话数据仍在这里,但并非总是如此,或者是什么?
谢谢。
答案 0 :(得分:1)
因为你已经设置了
sessionState mode="InProc" timeout="20"
在Web.config中,这意味着在20分钟后,Session将无用。
这是增强网站安全性的好方法。