当用户登录时,我将他的ID存储在会话中,请在Session["id"]
中说明。在大多数页面上,我将会话中的id存储为整数,并在各种方法中使用它。我检查了page_load事件
protected void Page_Load(object sender, EventArgs e)
{
if (Session["id"] == null)
{
Response.Redirect("Home.aspx");
}
//code goes here
}
我所知道的是,如果没有请求发送到服务器,会话将在20分钟后过期。但即使连续发送请求会话到期,我也会在主页上重定向。这是正确的方法还是我应该尝试其他替代方法。任何帮助将不胜感激。
答案 0 :(得分:0)
正确的方法是使用membership API透明地处理所有这些细节。如this explanatory page所示,您可以使用web.config中的参数直接在成员资格API中设置超时间隔。
希望我帮忙!
答案 1 :(得分:0)
如果两个服务器请求之间的间隔超过20分钟,那么只有您的会话才会过期
答案 2 :(得分:0)
使用永久用户登录会话在ASP.NET中,该示例描述了如何在ASP.NET中创建永久用户登录会话。示例代码包含一个ASP.NET MVC4项目,用于控制用户注册和登录过程。但是您可以在任何类型的ASP.NET项目中使用此技术。但简单地说,您可以使用此代码
此类的功能是将表单身份验证票证添加到浏览器cookie集合中,并且生命周期到期。
public sealed class CookieHelper
{
private HttpRequestBase _request;
private HttpResponseBase _response;
public CookieHelper(HttpRequestBase request,
HttpResponseBase response)
{
_request = request;
_response = response;
}
//[DebuggerStepThrough()]
public void SetLoginCookie(string userName,string password,bool isPermanentCookie)
{
if (_response != null)
{
if (isPermanentCookie)
{
FormsAuthenticationTicket userAuthTicket =
new FormsAuthenticationTicket(1, userName, DateTime.Now,
DateTime.MaxValue, true, password, FormsAuthentication.FormsCookiePath);
string encUserAuthTicket = FormsAuthentication.Encrypt(userAuthTicket);
HttpCookie userAuthCookie = new HttpCookie
(FormsAuthentication.FormsCookieName, encUserAuthTicket);
if (userAuthTicket.IsPersistent) userAuthCookie.Expires =
userAuthTicket.Expiration;
userAuthCookie.Path = FormsAuthentication.FormsCookiePath;
_response.Cookies.Add(userAuthCookie);
}
else
{
FormsAuthentication.SetAuthCookie(userName, isPermanentCookie);
}
}
}
}
此功能用于登录页面或点击登录按钮控制。在附加的示例项目中,以下函数在AccountController类中编写。此函数验证用户的登录,然后将永久性表单身份验证票证添加到浏览器。
private bool Login(string userName, string password,bool rememberMe)
{
if (Membership.ValidateUser(userName, password))
{
CookieHelper newCookieHelper =
new CookieHelper(HttpContext.Request,HttpContext.Response);
newCookieHelper.SetLoginCookie(userName, password, rememberMe);
return true;
}
else
{
return false;
}
}