如何在会话到期后保留数据

时间:2012-09-03 20:49:51

标签: asp.net vb.net session

如果用户的会话已过期,我想将用户重定向到自定义页面。

On PageLoad
If Session("OrgID") = Nothing Then
    Response.Redirect("SchoolLogin.aspx?schoolID="+[schoolid])
End If

我可以将schoolID存储在每个页面的隐藏字段中,但这看起来并不优雅。我想在每个页面上尝试使用用户控件中的隐藏字段,但是用户控件PageLoad在主PageLoad之后触发,因此在检查会话到期之前我会收到错误。对此有一个共同的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以使用QueryString,ViewState(ASP.NET内置隐藏字段)或将其设置为cookie值。

我对你的情景不太了解。我能提供的最好的例子就是我如何处理(我猜的是)与你的情况类似。

为要继承的所有页面类创建一个基类(更多这里是oldy但是好的http://www.4guysfromrolla.com/articles/041305-1.aspx),将您的SchoolId属性添加到它。这是在c#我的appologise,不幸的是VB.NET语法字面上让我的牙齿纠结。翻译它应该不难,因为这是非常基本的东西。

使用QuertString,您需要测试-1并在这种情况下重定向。

public class BasePage : System.Web.UI.Page
{
    public int SchoolId
    {
        get
        {
            if (Request.QueryString["schoolId"] != null)
            {
                return Convert.ToInt32(Request.QueryString["schoolId"]);
            }
            else
            {
                return -1;
            }
        }
    }
}

使用ViewState

public class BasePage : System.Web.UI.Page
{
    public int SchoolId
    {
        get
        {
            if (ViewState["schoolId"] != null)
            {
                return (int)ViewState["schoolId"];
            }
            else
            {
                int schoolId = someDataLayer.SelectUsersSchoolId(User.Identity.Name);
                ViewState["schoolId"] = schoolId;
                return schoolId;
            }
        }
    }
}

使用cookies(更多信息)http://msdn.microsoft.com/en-us/library/aa289495(v=vs.71).aspx

public class BasePage : System.Web.UI.Page
{
    public int SchoolId
    {
        get
        {
            if (Request.Cookies["schoolId"] != null)
            {
                return (int)Request.Cookies["schoolId"].Value;
            }
            else
            {
                int schoolId = someDataLayer.SelectUsersSchoolId(User.Identity.Name);
                Request.Cookies["schoolId"].Value = schoolId;
                Request.Cookies["schoolId"].Expires = DateTime.Now.AddDays(1);
                return schoolId;
            }
        }
    }
}