【问题标题】:prevent user from accessing page when click back button [duplicate]单击后退按钮时阻止用户访问页面[重复]
【发布时间】:2014-07-01 05:07:29
【问题描述】:

我有 3 个用户,并为他们提供了一个登录页面。当用户登录时,用户将被定向到他们尊重的页面。但是当用户单击浏览器的后退按钮时的问题,他们不应该被允许访问页面而无需再次提供登录凭据。 LoginPage.cs

protected void bLogin_Click(object sender, EventArgs e)
{

        datatable = methodobj.getData("select regd_no, pword,user_type from stu_info where regd_no='" + tbUName.Text + "'and pword='" + tbPword.Text + "' ");

        if (datatable.Rows.Count >= 1)
        {
            if (string.Compare(Convert.ToString(datatable.Rows[0][0]), tbUName.Text, false) == 0 &&
                string.Compare(Convert.ToString(datatable.Rows[0][1]), tbPword.Text, false) == 0)
            {
                Session["loginstatus"] = true;

                if (datatable.Rows[0]["user_type"].ToString() == "admin")
                {
                    Session["regd_no"] = Convert.ToString(updtkitable.Rows[0]["regd_no"]);
                    Response.Redirect("~/aHome.aspx");
                }
                if (datatable.Rows[0]["user_type"].ToString() == "students")
                {
                    Session["regd_no"] = Convert.ToString(updtkitable.Rows[0]["regd_no"]);
                    Response.Redirect("~/RandomPassword.aspx");
                }
                if (datatable.Rows[0]["user_type"].ToString() == "teacher")
                {
                    Session["regd_no"] = Convert.ToString(updtkitable.Rows[0]["regd_no"]);
                    Response.Redirect("~/subMark.aspx");
                }
            }

            else
            {
                lbStatus.Text = "**Login fail. Incorrect UserId or Password.";
            }
        }
        else
        {
            lbStatus.Text = "**Login fail. Incorrect UserId or Password.";
        }



}

AdminMasterPage.cs

protected void Page_Load(object sender, EventArgs e)
{
    Response.Cache.SetNoStore();
    if (Session["loginstatus"] == null)
    {
        Response.Redirect("~/login.aspx");
    }
    else if (!Convert.ToBoolean(Session["loginstatus"]))
    {
        Response.Redirect("~/login.aspx");
    }
    else if (Session["user_type"] != "admin")
    {
        Response.Redirect("~/login.aspx");
    }

【问题讨论】:

  • 如果您想阻止用户在不重新登录的情况下访问特定页面,那么您不应该存储会话。对吗?

标签: c# asp.net session


【解决方案1】:

这些页面缓存在客户端,因此您无法从服务器端执行任何操作。

来自客户端的两个可能的改进:

  1. 退出后告诉客户端关闭浏览器
  2. 使用 JavaScript 检查页面加载时的凭据,如果它们无效,则导航到登录页面

第二种情况有一些缺点:页面要么在检查凭据之前可见,要么在检查后不可见,如果默认隐藏,即使用户拥有适当的凭据。并且他可以在 JS 执行之前抓取页面内容(或者完全禁用 JS)。 意味着这并不安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2013-10-01
    相关资源
    最近更新 更多