【发布时间】:2015-10-27 19:06:45
【问题描述】:
我正在开发一个小型库存管理系统。我几乎已经在我的本地机器上创建了它。它按设计工作。我刚刚将其移至我的主机帐户,现在我遇到了一些问题。
1,登录后,当用户进入不同的页面时,打开和关闭表单,一段时间后它会重定向到登录页面。我不知道为什么。似乎发生了某种异常或会话变空了。这种情况如何处理?
2,这是使用母版页的 Page_Load 事件检查用户登录的正确方法吗?
我的网站使用一个母版页,该母版页对顶部导航菜单和底部正文区域具有单独的布局。当用户第一次登陆该站点时,它会登录系统并在成功登录后将他的信息存储在会话中。我在所有页面中大量使用 Session 来添加、删除、更新目的。执行添加记录时,我会在会话中传递成功失败消息以在回发后显示。登录页面后面的代码如下:
protected void loginForm_OnAuthenticate(object sender, AuthenticateEventArgs e)
{
string error = "";
sMethodName = "loginForm_OnAuthenticate";
_objLoginBLL = new LoginBLL();
int iRetVal = _objLoginBLL.ValidateUser(loginForm.UserName, loginForm.Password, ref error);
if (iRetVal >= 0)
{
Session.Clear(); //Remove all stored Session variables.
Session[Constant.Session.LOGGED_IN_DATETIME] = DateTime.Now.ToString("yyyyMMddHHmmssfff");
Session[Constant.Session.LOGIN_USERNAME] = loginForm.UserName;
Session[Constant.Session.LOGIN_USER_ID] = iRetVal;
Session[Constant.Session.LOGIN_COMPANY] = ddlCompanies.SelectedValue;
Session[Constant.Session.LOGIN_FISCAL_YEAR] = ddlFiscalYear.SelectedValue;
Session[Constant.Session.IS_DIRECT_ACCESS] = "NO";
FormsAuthentication.RedirectFromLoginPage(loginForm.UserName, loginForm.RememberMeSet);
}
else
{
Logger.Log("User validation failed.", sClassName, sMethodName, DEBUG);
switch (iRetVal)
{
case -1:
loginForm.FailureText = Constant.Messages.INCORRECT_USER_OR_PASSWORD;
loginForm.Focus();
break;
case -2:
loginForm.FailureText = Constant.Messages.ACCOUNT_LOCKED;
loginForm.Focus();
break;
//case -3:
//TODO: Account doesn't exists
default:
var randToken = new Random().Next(1000);
Session[Constant.Session.TOKEN] = randToken;
var myHashtable = new Hashtable
{
{Constant.Session.TOKEN, randToken},
{Constant.Fields.ERROR_KEY, iRetVal}
};
Response.Redirect(WebFunctions.CreateQueryString(Constant.Urls.Error, myHashtable));
break;
}
}
}
我不断检查会话是否不包含任何用户 ID,然后将其重定向到登录页面。我的母版页后面的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (Session[Constant.Session.LOGIN_USER_ID] == null)
{
FormsAuthentication.RedirectToLoginPage();
return;
}
CheckDBConnection();
Initialize();
}
任何帮助或提示将不胜感激。
您可以在此处查看该网站:www.paracha.net(如果有人感兴趣,我可以在私信中分享访客帐户凭据)
【问题讨论】:
-
我相信您正在使用 InProc 会话和 timeout="20" - 是否正确?
-
不,先生,我还没有设置类似的东西。你能解释一下吗?
标签: c# asp.net session forms-authentication master-pages