即使向服务器发送请求,会话也即将到期

时间:2013-12-30 12:08:59

标签: c# asp.net session login

当用户登录时,我将他的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分钟后过期。但即使连续发送请求会话到期,我也会在主页上重定向。这是正确的方法还是我应该尝试其他替代方法。任何帮助将不胜感激。

3 个答案:

答案 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;
}
}