Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET,页面加载和回发时的会话维护_Asp.net_Session_Pageload - Fatal编程技术网

ASP.NET,页面加载和回发时的会话维护

ASP.NET,页面加载和回发时的会话维护,asp.net,session,pageload,Asp.net,Session,Pageload,我正在制作一个网站,我需要维护一个登录用户会话。有不同的页面,因此必须维护每个页面的会话。我在主页上的enter按钮的click事件中传递会话变量中的值。 这段代码第一次运行良好,但当用户从另一个页面重定向到主页时,会话将变为null。为了保留所有页面的价值,我不知道在哪里进行会话 这是我的密码: protected void Page_Load(object sender, EventArgs e) { //Session["UserName"] = null; //Sess

我正在制作一个网站,我需要维护一个登录用户会话。有不同的页面,因此必须维护每个页面的会话。我在主页上的enter按钮的click事件中传递会话变量中的值。 这段代码第一次运行良好,但当用户从另一个页面重定向到主页时,会话将变为null。为了保留所有页面的价值,我不知道在哪里进行会话

这是我的密码:

 protected void Page_Load(object sender, EventArgs e)
{
    //Session["UserName"] = null;
    //Session["UserRoles"] = null;
    if (!Page.IsPostBack) //if page is not postback then here
    {
        Session["UserName"] = null;
        Session["UserRoles"] = null;
        if (Session["UserRoles"] != null && (String)Session["UserRoles"] == "Admin")
        {
            divLoggedInMember.Visible = true;
            lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"] + "(Admin)";
        }
        else if (Session["UserRoles"] != null && (String)Session["UserRoles"] == "member")
        {
            divLoggedInMember.Visible = true;
            lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"];
        }
    }

    else //if page postback then here
    {
        if (Session["UserRoles"] != null)
        {
            if ((String)Session["UserRoles"]=="Admin")
            {
                divLoggedInMember.Visible = true;
                lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"] + "(Admin)";
            }
            else
            {
                divLoggedInMember.Visible = true;
                lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"];
            }
        }
    }


}


 protected void btnenter_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            Session["UserName"] = null;
            Session["UserRoles"] = null;
            DataTable dt = new DataTable();
            dt=getUserInfo(txtUserId.Text.Trim(),txtPassword.Text.Trim());

            if (dt.Rows.Count == 0)
            {
                Response.Write("<script> alert('User Not Exist')</script>");
            }
            else
            {
                strUserName = dt.Rows[0]["User_Name"].ToString();
               // strUserName = txtUserId.Text.Trim(); 
                struserRoles = dt.Rows[0]["USER_ROLE"].ToString();
                Session["UserName"] = (String)strUserName;
                Session["UserRoles"] = (String)struserRoles;

                if (Session["UserRoles"] != null && (String)Session["UserRoles"]=="Admin")
                {
                    divLoggedInMember.Visible = true;
                    lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"] + "(Admin)";
                }
                else if (Session["UserRoles"] != null && (String)Session["UserRoles"] == "Member")
                {
                    divLoggedInMember.Visible = true;
                    lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"];
                }
                Response.Redirect("MemberPage.aspx", false);
            }
        }
        catch (Exception ex)
        {
            ex.Message.ToString();
        }
    }

基于您的问题,我不确定您是否了解ASP.NET中会话行为的工作原理。您不必做任何事情来保持同一网站中页面之间的会话。此外,您提供的代码片段永远不会执行任何操作:

       // You set theses two session vars to null, but then 
       // immediately check for contents??
       Session["UserName"] = null;
        Session["UserRoles"] = null;

        // Neither of these if statements will ever evaluate to true,
        // because you just set them to null above..
        if (Session["UserRoles"] != null && (String)Session["UserRoles"] == "Admin")
        {
            divLoggedInMember.Visible = true;
            lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"] + "(Admin)";
        }
        else if (Session["UserRoles"] != null && (String)Session["UserRoles"] == "member")
        {
            divLoggedInMember.Visible = true;
            lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"];
        }

基于您的问题,我不确定您是否了解ASP.NET中会话行为的工作原理。您不必做任何事情来保持同一网站中页面之间的会话。此外,您提供的代码片段永远不会执行任何操作:

       // You set theses two session vars to null, but then 
       // immediately check for contents??
       Session["UserName"] = null;
        Session["UserRoles"] = null;

        // Neither of these if statements will ever evaluate to true,
        // because you just set them to null above..
        if (Session["UserRoles"] != null && (String)Session["UserRoles"] == "Admin")
        {
            divLoggedInMember.Visible = true;
            lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"] + "(Admin)";
        }
        else if (Session["UserRoles"] != null && (String)Session["UserRoles"] == "member")
        {
            divLoggedInMember.Visible = true;
            lblLoggedinUser.Text = "Welcome" + " " + Session["UserName"];
        }

您遇到的问题是,在第一个if部分中,当您检查回发时,您正在清除会话变量,然后检查它们是否为null。这里没有意义。它们总是空的,你的if和else if永远不会发生。重新思考你的战略和你想要实现的目标

现在,我对你想做什么的评论。。。首先,以这种方式使用会话是在经典ASP中应该做的事情。使用ASP.NET有更好的机制来实现这一点。相反,您应该利用MembershipProvider和RoleProvider对您的用户进行身份验证并跟踪他们。通常使用Page.User.Identity.Name来检索用户的ID或用户名,而不是从会话变量中读取用户名。除此之外,还可以使用Roles.IsUserInRole或Roles类中的其他静态方法

第二件事,重复变量名的次数太多了。也就是说,您正在使用硬编码字符串,这些字符串在太多的地方指向同一事物。你的维修会一团糟。在开发阶段的早期,切换到FormsAuthentication,让ASP.NET为您处理上述所有任务

更新:ASP.NET包含一组有关登录和安全性的组件。其中之一是LoginView,它允许根据不同的角色指定不同的视图。通过使用此控件,您不必为正在进行的检查而烦恼

您在页面加载中所做的检查是可以的,但是您确实需要对此进行优化。如果有必要进行一次持续的检查,那么就不用担心我是否回邮了。。。其他的到外面检查一下。例如:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["UserRoles"] != null && Session["UserRoles"] == "Admin")
    {
        // Show Admin section
        // Hide Non-admin section
    }
    else
    {
        // Hide Admin section
        // Show non-admin section
    }

    if (!IsPostBack)
    {
        // Do Postback logic here
    }
}

同样,您试图实现的功能已经作为LoginView组件提供。看看这些

您遇到的问题是,在第一个if部分中,当您检查回发时,您正在清除会话变量,然后检查它们是否为null。这里没有意义。它们总是空的,你的if和else if永远不会发生。重新思考你的战略和你想要实现的目标

现在,我对你想做什么的评论。。。首先,以这种方式使用会话是在经典ASP中应该做的事情。使用ASP.NET有更好的机制来实现这一点。相反,您应该利用MembershipProvider和RoleProvider对您的用户进行身份验证并跟踪他们。通常使用Page.User.Identity.Name来检索用户的ID或用户名,而不是从会话变量中读取用户名。除此之外,还可以使用Roles.IsUserInRole或Roles类中的其他静态方法

第二件事,重复变量名的次数太多了。也就是说,您正在使用硬编码字符串,这些字符串在太多的地方指向同一事物。你的维修会一团糟。在开发阶段的早期,切换到FormsAuthentication,让ASP.NET为您处理上述所有任务

更新:ASP.NET包含一组有关登录和安全性的组件。其中之一是LoginView,它允许根据不同的角色指定不同的视图。通过使用此控件,您不必为正在进行的检查而烦恼

您在页面加载中所做的检查是可以的,但是您确实需要对此进行优化。如果有必要进行一次持续的检查,那么就不用担心我是否回邮了。。。其他的到外面检查一下。例如:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["UserRoles"] != null && Session["UserRoles"] == "Admin")
    {
        // Show Admin section
        // Hide Non-admin section
    }
    else
    {
        // Hide Admin section
        // Show non-admin section
    }

    if (!IsPostBack)
    {
        // Do Postback logic here
    }
}

同样,您试图实现的功能已经作为LoginView组件提供。看看这些

基于您的问题,我不确定您是否了解ASP.NET中会话行为的工作原理。你不必做任何事情来在同一个网站的页面之间保持会话。嗨,大卫,谢谢你的回复,我是ASP.Net的初学者,所以我请求你对我放松,但我知道会话是在ASP.Net中维护的
实际上,我需要知道我应该在哪里检查我的会话变量,以便区分管理员或成员用户,并保持会话值?这不是问题!实际上,我认为@Hussein Roncevic给出的答案是很好的-ASP.NET有一些设施可以为您管理大部分此类内务管理,并且它将使您的代码更易于维护。基于您的问题,我不太确定您是否了解ASP.NET中会话行为的工作原理。你不必做任何事情来在同一个网站的页面之间保持会话。嗨,大卫,谢谢你的回复,我是ASP.Net的初学者,所以我请求你对我放松,但我知道会话是在ASP.Net中维护的,实际上,我需要知道应该在哪里检查会话变量,以便区分管理员或成员用户,并保持会话值?这不是问题!事实上,我认为@Hussein Roncevic的答案被采纳了-ASP.NET有设施为您管理大部分此类内务管理,它将使您的代码更易于维护。感谢Husein的回复,感谢Husein的回复,实际上,我需要为管理员和成员维护会话,根据这些角色,我需要显示/隐藏一些元素,这就是为什么我要创建会话并维护它们。是的,我在第一个if语句中赋值时得到了这一点。您能告诉我在哪里使用这个会话,以便检查登录的用户是管理员还是会员吗??提前感谢Hanks Husein的回复,感谢Husein的回复,实际上我需要为管理员维护会话,为成员维护会话,基于这些角色,我需要显示/隐藏一些元素,这就是我创建会话并维护会话的原因。是的,我在第一个if语句中赋值时得到了这一点。您能告诉我在哪里使用这个会话,以便检查登录的用户是管理员还是会员吗??提前谢谢