如何阻止URL输入并将用户重定向到登录页面?

时间:2010-10-26 17:14:49

标签: asp.net

我在ASP.NET上使用表单身份验证。如果我尝试通过复制查询字符串并将其粘贴到浏览器来访问页面,则允许我访问该页面。

如何防止这种情况?我希望用户始终必须登录。

4 个答案:

答案 0 :(得分:5)

您必须在web.config中设置身份验证模式

  <authentication mode="Forms">
        <forms name="Authen" protection="All" timeout="60" loginUrl="login.aspx"/>
    </authentication>
<authorization>
    <deny users="?"/>
</authorization>

答案 1 :(得分:1)

您可以使用<location>元素限制对某些页面的访问。例如,限制对子文件夹admin的访问:

<system.web>
    <!-- enable Forms authentication -->
    <authentication mode="Forms">
        <forms 
            name="MyAuth" 
            loginUrl="login.aspx" 
            protection="All" 
            path="/" 
        />
    </authentication>
</system.web>

<!-- restrict access to the admin subfolder 
     and allow only authenticated users -->
<location path="admin">
    <system.web>
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</location>

答案 2 :(得分:0)

您应该在web.config文件中添加类似内容:

<authorization>
    <allow users="user1, user2"/>
    <deny users=”?”/>
</authorization>

那应该解决问题。请参阅:http://support.microsoft.com/kb/815151

答案 3 :(得分:0)

除了在 web.config 文件中配置身份验证之外,您还可以使用Global.asax Session_Start(...)方法检查用户是否有新会话,还要确保修改会话cookie,如果它为null,则应将用户重定向到登录页面:

public class Global:System.Web.HttpApplication 
{
    protected void Session_Start(object sender, EventArgs e) 
    {
        if(Session.IsNewSession) 
        {
            if (Request.Headers["Cookie"] != null) 
            {
                if (Request.Headers["Cookie"].IndexOf("Web_App_Login_Cookie", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    FormsAuthentication.SignOut();
                    Context.User = null;
                    Response.Redirect("~/logOn.aspx");
                }
            }
        }
    }
}

此外,如果您将用户会话信息存储在某个类中,则可以覆盖某些基类中的 OnInit(...)方法,以确保用户已存在于某些自定义会话集合中,如果不存在您应该再次重定向到登录页面。

public class SessionBasePage : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (HttpContext.Current != null && HttpContext.Current.Session != null)            
        {
            UserSession = HttpContext.Current.GetUserSession();
            if (UserSession != null)
            {
                LoggedUserInfo = HttpContext.Current.GetLoggedUserInfo();
                HttpContext.Current.UpdateLoggedUserInfo();
            }
            else { Response.Redirect("~/logOn.aspx", true); }
        }
    }
}