【问题标题】:How to stay on the same page until session expires?如何在会话到期之前保持在同一页面上?
【发布时间】:2015-12-23 13:03:02
【问题描述】:

我这里有这个 aspx 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MSSQLConnector;
using System.Data;
using System.Data.SqlClient;

namespace SoftwareAnalysisAndDesign.SAD
{
    public partial class AdministratorPage : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            //If user run this page without logging in, it will redirect the user to the login page
            if (Session["adminlogin"] == null)
            {
               Response.Redirect("LoginPage.aspx", true);
            }
        }
    }
}

当我在会话为空时直接进入管理员页面时,它将进入登录页面。但是当我使用用户名和密码登录时,系统会给我一条消息“浏览器有重定向循环”。当我按下浏览器后退按钮时,我应该进行什么过程以使我的 AdminPage 保持在同一页面上,它只会转到 LoginPage 是会话为空或会话被注销事件处理程序终止。或者,如果可能,如果用户按下 Web 浏览器的后退按钮,系统将通过是或否的决定提醒用户“您要注销”。如果不是,系统将停留在同一页面上,如果是,会话将被终止,系统将重定向到登录页面。

我的登录页面代码:

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using MSSQLConnector;
using System.Data;

namespace SoftwareAnalysisAndDesign.SAD
{
    public partial class OnlineAppSyss : System.Web.UI.Page
    {
        public void Admin()
        {
            //String decleration
            string adminusername = (this.UserName.Value);
            string adminpass = (this.Password.Value);

            try
            {
                if (adminusername == "admin" && adminpass == "cmpe1234")
                {
                    Session["adminlogin"] = adminusername;
                    Response.Redirect("AdministratorPage.aspx");
                }
                else
                {
                    Response.Write("<script language=javascript>alert('Username and password does not match. Try again');</script>");
                }
            }
            catch
            {
                Response.Write("<script language=javascript>alert('Username and password does not match. Try again');</script>");
            }
    }
}

【问题讨论】:

  • 您已经在管理员页面上了吗?在这种情况下,else 子句可能会无限期地不断重定向。试试不带else...
  • 我试过了,没有else函数sir,但是系统会将页面重定向到登录页面,但会话仍然处于活动状态。只希望我的系统仅在会话终止时进入登录页面。
  • 我已经编辑了我的帖子,先生。
  • 在AdministratorPage 上的Page_Load 事件中,您能否将Session["adminlogin"] 分配给一个变量,并设置一个断点来查看它的值是多少?

标签: c# asp.net session pageload


【解决方案1】:

这是我上面问题的正确代码:

对于登录页面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using MSSQLConnector;
using System.Data;

namespace SoftwareAnalysisAndDesign.SAD
{
    public partial class LoginPage: System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //If session is not null  redirect to this page
            if (Session["adminlogin"] != null)
            {
                Response.Redirect("AdministratorPage.aspx", true);
            }
        }
        public void Admin()
        {
            //String decleration
            string adminusername = (this.UserName.Value);
            string adminpass = (this.Password.Value);

            try
            {
                if (adminusername == "admin" && adminpass == "cmpe1234")
                {
                    Session["adminlogin"] = adminusername;
                    Response.Redirect("AdministratorPage.aspx");
                }
                else
                {
                    Response.Write("<script language=javascript>alert('Username and password does not match. Try again');</script>");
                }
            }
            catch
            {
                Response.Write("<script language=javascript>alert('Username and password does not match. Try again');</script>");
            }
        }
    }
}

对于管理页面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MSSQLConnector;
using System.Data;
using System.Data.SqlClient;

namespace SoftwareAnalysisAndDesign.SAD
{
    public partial class AdministratorPage : System.Web.UI.Page
    {


       protected void Page_Load(object sender, EventArgs e)
        {
            //If session is null, go to login page
            if (Session["adminlogin"] == null)
            {
                Response.Redirect("LoginPage.aspx", true);
            }
        }
    }
}

即使按下网络浏览器的后退按钮,它也会重定向到他们当前的页面。

【讨论】:

    【解决方案2】:

    根据这行代码:public partial class AdministratorPage : System.Web.UI.Page,我猜你在Admin Page

    让我们想象一下,当你的Session["adminlogin"] NOT NULL 时,你转到Admin Page,那么条件将转到else 部分

        if (Session["adminlogin"] == null)
        {
           Response.Redirect("LoginPage.aspx", true);
        }
        else
        {
            Response.Redirect("AdministratorPage.aspx", true);
        }
    

    它会不断将您返回到Admin Page。这就是循环的原因。 解决方案应该是:删除else 部分。

    只希望我的系统只在会话进行时进入登录页面 终止

    这意味着当Session 仍然存在时,您会阻止用户进入Login Page。解决方案是:检查Login Page 中的Session,然后根据需要重定向到另一个页面。

    // Check for session existence
    if (Session["adminlogin"] != null)
    {
        // Redirect to another page
        Response.Redirect("AdministratorPage.aspx", true);
    }
    

    【讨论】:

    • 很高兴听到这个消息:)
    【解决方案3】:

    由于您的代码中有这一部分,系统会给出一条消息“浏览器有一个重定向循环”。

      else
      {
           Response.Redirect("AdministratorPage.aspx", true);
      }
    

    只要您的登录成功,您就会将页面重定向到导致重定向循环的同一页面(AdministratorPage.aspx)。 删除 else 部分。

    【讨论】:

    • @laurencekeithalbano 确定Session["adminlogin"] 登录成功后不为空吗?
    • 是的先生,我已经编辑了我的问题我添加了管理功能
    • @laurencekeithalbano 我在您的管理功能中看不到任何错误。放置一个断点并检查。并检查是否有任何拼写错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2020-08-07
    • 1970-01-01
    • 2013-08-05
    • 2022-11-27
    相关资源
    最近更新 更多