项目下面有3个页面:
login.aspx    //登陆页面
index.aspx    //首页
detail.aspx   //其他页面
我在web.config中设置:
<authentication mode="Forms">
      <forms name="CntoAuth" loginUrl="Login.aspx" protection="None" path="/"/>
    </authentication>
我是想用户只有登陆之后才能访问 detail.aspx 页面。该怎么做啊

解决方案 »

  1.   

    Web.config
      <configuration>
      <system.web>
      <compilation debug="true"/>
      <authentication mode="Forms">
      <forms loginUrl="login.aspx" name = ".ASPXFORMSAUTH" />
      </authentication>
      <authorization>
      <deny users="?"/>
      </authorization>
      </system.web>
      </configuration>
      default.aspx
      <HTML>
      <HEAD>
      <TITLE>首页</TITLE>
      <script language="VB" runat="server">
      Sub Page_Load(Sender As Object, e As EventArgs)
      Message.Text = String.Format("你好,{0}", Context.User.Identity.Name)
      End Sub
      sub btnSignout_Click(Sender as Object, E as EventArgs)
      FormsAuthentication.SignOut()
      Response.Redirect("login.aspx")
      end sub  </script>
      </HEAD>
      <BODY>
      <asp:label id="Message" runat="server"/>
      <br>
      <form method="post" runat="server">
      <asp:button id="btnSignout" Text="退出登录" runat="server" OnClick="btnSignout_Click"/>
      </form>
      </BODY>
      </HTML>  login.aspx
      <HEAD>
      <TITLE>首页</TITLE>
      <script lanugage="c#" runat="server">
      private void Page_Load(object sender, EventArgs e)
      {
      if (Request.IsAuthenticated)
      Response.Redirect("default.aspx"); 
      }
      void btnLogin_Click(Object sender, EventArgs e)
      {
      if (txtUsername.Text != null && txtUsername.Text != String.Empty && txtPassword.Text != null && txtPassword.Text != String.Empty)
      FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, true);
      else
      lblError.Text = "错误的用户名/密码";
      }
      </script>
      </HEAD>
      <BODY>
      <form method="post" runat="server">  <asp:Label id="lblUsername" runat="server" Text="用户名:"/>
      &nbsp;&nbsp;&nbsp;
      <asp:Textbox id="txtUsername" runat="server"/>
      <br>
      <br>
      <asp:Label id="lblPassword" runat="server" Text="密 码:"/>
      &nbsp;&nbsp;&nbsp;
      <asp:Textbox id="txtPassword" runat="server" TextMode="password"/>
      <br>
      <asp:button id="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />  </form>
      <hr>
      <br>
      <asp:Label id="lblError" forecolor="red" runat="server"/>
      </BODY>
      </HTML>
      

  2.   

    在: <System.Web>
                      
        </System.Web>
    中加:
    <authentication mode="Forms" >
          <forms name=".ASPXUSERDEMO" loginUrl="login.aspx" protection="All" 
    timeout="60" />
        </authentication> 
      

  3.   

    <authorization>
            <deny users="?" />
    </authorization>
      

  4.   

    可能是我没有表达清楚,我想
    login.aspx    //登陆页面
    index.aspx    //首页
    这2个页面可以不需要登陆就之间访问。
    而detail.aspx   //其他页面
    这个页面只有通过验证才能访问。
    这3个页面都在同一文件夹下面。这个该怎么实现啊?
      

  5.   

    <location path="index.aspx">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
    </location>
      

  6.   

    http://blog.csdn.net/kgdiwss/archive/2005/02/24/299652.aspx
    也许对你有用。
      

  7.   

    Asp.Net基于forms的验证机制,记录一下...
    最近在看asp.net forum,对其中的验证机制看得模模糊糊,看完构建安全的 ASP.NET 应用程序中的表单身份验证部分,思路就很清晰了,稍做了点记录,以便查阅: 构建基于forms的验证机制过程如下: 
    1,设置IIS为可匿名访问和asp.net web.config中设置为form验证 
    2,检索数据存储验证用户,并检索角色(如果不是基于角色可不用) 
    3,使用FormsAuthenticationTicket创建一个Cookie并回发到客户端,并存储 
      角色到票中,如: 
      FormsAuthentication.SetAuthCookie(Username,true | false) 
      cookies保存时间: 
      HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.Now.AddDays(1)   如果需要存储角色,采用: 
     FormsAuthenticationTicket authTicket = new 
     FormsAuthenticationTicket( 
                1, // version 
                txtUserName.Text, // user name 
                DateTime.Now, // creation 
                DateTime.Now.AddMinutes(20),// Expiration 
                false, // Persistent 
                roles ); // User data 
      roles是一个角色字符串数组 
      string encryptedTicket = FormsAuthentication.Encrypt(authTicket); //加密   存入Cookie 
      HttpCookie authCookie = 
      new HttpCookie(FormsAuthentication.FormsCookieName, 
      encryptedTicket);   Response.Cookies.Add(authCookie); 4,在Application_AuthenticateRequest事件中处理程序中(Global.asax)中,使用 
      票创建IPrincipal对象并存在HttpContext.User中 
      代码: 
      HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; 
      FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);//解密 
      string[] roles = authTicket.UserData.Split(new char[]{';'});//根据存入时的格式分解,;或|.... 
      Context.User = new GenericPrincipal(Context.User.Identity, Roles);//存在HttpContext.User中 5,需要对某些页面进行角色控制,有两种方法: 
     5.1,web.config中加 
        <location path="EditPost.aspx"> 
     <system.web> 
      <authorization> 
                            <allow roles="RoleName" /> 
       <deny users="?" /> 
      </authorization> 
     </system.web> 
        </location> 
     5.2,把只能是某种角色访问的文件放在同一目录下,在此目录下添加一个web.config 
       <configuration> 
         <system.web> 
     <authorization> 
               <allow roles="RoleName" /> 
        <deny users="*" /> 
     </authorization> 
         </system.web> 
       </configuration> 
      说明:子目录的web.config设置优先于父目录的web.config设置 
     
      

  8.   

    在程序中用session吧,何必非要在webconfig中配置呢?
      

  9.   

    我用:FormsAuthenticationTicket authTicket = new 
     FormsAuthenticationTicket( 
                1, // version 
                txtUserName.Text, // user name 
                DateTime.Now, // creation 
                DateTime.Now.AddMinutes(20),// Expiration 
                false, // Persistent 
                roles ); // User data 我用:System.Web.HttpContext.Current.User.Identity.Name ;可以取得当前的用户名。
    但是我怎么才能取的当前用户是什么角色呢?