web.config里禁止匿名访问admin文件夹下的页面,该文件夹下有三个页面main.aspx,1.aspx,2.aspx
在main.aspx上做连接到后两个,地址如下“admin/1.aspx”,"admin/2.aspx";
然后再首页index上登陆 
 if(用户名密码正确)
{
//我用下面语句进入main.aspx
Server.transfer("admin/main.aspx");
}
成功,但是要再去1.aspx就显示没有访问权限了。好像是登陆的信息没有保存下来,只要去其它的页面就显示没有权限
怎么解决呢

解决方案 »

  1.   

    配置web.config文件,或使用forms论证授权,
    这是一个很基础的问题,到网上找资料吧
      

  2.   

    http://www.cnblogs.com/gwazy/archive/2005/03/04/112643.aspx根目录下的 web.config
    是部分,把它插入就行了...根目录下新建一个受保护的目录...
        这个目录下的 web.config 
     是全部....
      

  3.   

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <system.web>
    <!--  动态调试编译
              设置 compilation debug="true" 以启用 ASPX 调试。否则,将此值设置为
              false 将提高此应用程序的运行时性能。
              设置 compilation debug="true" 以将调试符号(.pdb 信息)
              插入到编译页中。因为这将创建执行起来
              较慢的大文件,所以应该只在调试时将此值设置为 true,而在所有其他时候都设置为
              false。有关更多信息,请参考有关
              调试 ASP.NET 文件的文档。
        -->
    <compilation defaultLanguage="c#" debug="true" />
    <!--  自定义错误信息
              设置 customErrors mode="On" 或 "RemoteOnly" 以启用自定义错误信息,或设置为 "Off" 以禁用自定义错误信息。 
              为每个要处理的错误添加 <error> 标记。          "On" 始终显示自定义(友好的)信息。
              "Off" 始终显示详细的 ASP.NET 错误信息。
              "RemoteOnly" 只对不在本地 Web 服务器上运行的
               用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便 
               不向远程客户端显示应用程序的详细信息。
        -->
    <customErrors mode="RemoteOnly" />
    <!--  身份验证 
              此节设置应用程序的身份验证策略。可能的模式是 "Windows"、 
              "Forms"、 "Passport" 和 "None"          "None" 不执行身份验证。 
              "Windows" IIS 根据应用程序的设置执行身份验证 
                (基本、简要或集成 Windows)。在 IIS 中必须禁用匿名访问。
              "Forms" 您为用户提供一个输入凭据的自定义窗体(Web 页),然后 
               在您的应用程序中验证他们的身份。用户凭据标记存储在 Cookie 中。
              "Passport" 身份验证是通过 Microsoft 的集中身份验证服务执行的,
               它为成员站点提供单独登录和核心配置文件服务。
        -->
    <authentication mode="Forms">   <forms name=".COOKIEDEMO" loginUrl="bb.aspx" protection="All"
       timeout="60" path="/"> 
          </forms> 
    </authentication>
    <!--  授权 
               此节设置应用程序的授权策略。可以允许或拒绝不同的用户或角色访问
              应用程序资源。通配符: "*" 表示任何人,"?" 表示匿名
              (未经身份验证的)用户。
        -->
    <authorization>
    <allow users="*" /> <!-- 允许所有用户 -->
    <!--  <allow     users="[逗号分隔的用户列表]"
                                 roles="[逗号分隔的角色列表]"/>
                      <deny      users="[逗号分隔的用户列表]"
                                 roles="[逗号分隔的角色列表]"/>
                 <deny users="?" />                 
                                 
                -->
             
    </authorization>
    <!--  应用程序级别跟踪记录
              应用程序级别跟踪为应用程序中的每一页启用跟踪日志输出。
              设置 trace enabled="true" 可以启用应用程序跟踪记录。如果 pageOutput="true",则
              在每一页的底部显示跟踪信息。否则,可以通过浏览 Web 应用程序
               根目录中的 "trace.axd" 页来查看
              应用程序跟踪日志。
        -->
    <trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
    <!--  会话状态设置
              默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。
              如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
             若要禁用 Cookie,请设置 sessionState cookieless="true"。
        -->
    <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
    cookieless="false" timeout="20" />
    <!--  全球化
              此节设置应用程序的全球化设置。
        -->
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
    </system.web>
    </configuration>
    根目录下的 web.config
      

  4.   

    根目录下新建一个文件夹 
    NewFolder1
    它里边的web.config<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.web>
        <authorization>
          <deny users="?" />
        </authorization>
      </system.web>
    </configuration>bb.aspx 中的... private void Button1_Click(object sender, System.EventArgs e)
    {
    if (this.TextBox1 .Text=="abc" &&  this.TextBox2 .Text=="abc")
    {
    System.Web.Security .FormsAuthentication .RedirectFromLoginPage(this.TextBox1 .Text,false);

    }
    else
    { } }
      

  5.   

    受不了了,各位我不是问web。config啊,这个我已经配置好了,确实可以阻止匿名用户访问admin文件夹下的所有页面
    现在是我登陆了以后,只可以访问一次admin下的页面,访问地二个就出错了,好像是没有登陆一样
    我的登陆函数是这样写的
    private void btnLogin_Click(object sender, System.EventArgs e)
    {
    SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["xgzx"]);
    string sql="select userName from users where userID='{0}' and pwd='{1}'";
    sql=String.Format(sql,txtName.Text.Trim(),txtPwd.Text.Trim());
    SqlCommand cmd=new SqlCommand(sql,conn);
    conn.Open();
    string name=null;
    try
    {
    name=(string)cmd.ExecuteScalar();
    }
    finally
    {
    conn.Close();
    }
    if(name!=null)
    {
    // FormsAuthentication.RedirectFromLoginPage(name,chkPwd.Checked);
    lblWrongUser.Text="您可以进入管理系统了,离开时别忘了注销!";
    Server.Transfer("admin/admin.aspx");
    // Response.Redirect("admin/qgzxIndex.aspx");
    }
    else
    {
    lblWrongUser.Text="账号或密码不正确!";
    lblWrongUser.Visible=true;
    }这个判断了用户密码正确后再应该怎么做呢
      

  6.   

    boytomato(深爱一人叫颖的女孩!) System.Web.Security .FormsAuthentication .RedirectFromLoginPage(this.TextBox1 .Text,false);
    这句话是干什么用的,我原来也写了的,可是好像直接要连到default.aspx页面,我没有这个页面,是不是应该把我的禁止匿名访问的首页改成这个名字啊
      

  7.   

    不对,它是直接到根目录的default.aspx上去的,那我就算把admin文件夹下的访问首页改成这个名字,还是会说找不到default.aspx
      

  8.   

    System.Web.Security .FormsAuthentication .RedirectFromLoginPage(this.TextBox1 .Text,false);后边表示把 
    this.text1.text 写入 cooke,
    false 表示暂时写入,一定时间实效...
    true 表示写入...无时间限制...它默认是转到 default.aspx 页面下了....
      

  9.   

    RedirectFromLoginPage 方法重定向到在查询字符串中指定的返回 URL 键。例如,在 URL http://www.contoso.com/login.aspx?ReturnUrl=caller.aspx 中,caller.aspx 是 RedirectFromLoginPage 所重定向到的返回 URL。如果返回键不存在,则 RedirectFromLoginPage 将重定向到 Default.aspx。当浏览器被重定向到 <forms> 元素配置指令的 loginUrl 属性中所指定的登录页时,ASP.NET 将自动添加返回 URL。此方法发出身份验证票,然后使用该身份验证票执行 SetForms,并将为应用程序所正确配置的 Cookie 名称用作重定向响应的一部分。
      

  10.   

    那我现在想登陆后定向到根目录下的admin文件夹下的main页面怎么办?
    而且怎么保证登陆一次,就可以浏览所有的禁止匿名访问的页面,我发现现在只能浏览一个页面,流览第二个就说你是匿名用户了,很奇怪
    给点详细的代码好吗
      

  11.   

    简单的说就是
    登陆时间响应()
    {
    判断用户,密码
    if(正确)
    //链接到admin/main.aspx   #####这一段怎么写
    }
    而且从main上能访问其它所有登陆用户才能访问的页面吗
      

  12.   

    RedirectFromLoginPage是用来登陆后返回所申请的页面的
    比如你申请的是1.aspx
    如果没有登陆的话会重定向到login.aspx页面
    登陆成功后会返回到1.aspx我不知道
    lblWrongUser.Text="您可以进入管理系统了,离开时别忘了注销!";
    Server.Transfer("admin/admin.aspx");
    //Response.Redirect("admin/qgzxIndex.aspx");
    这段是做什么的 也许是这个的影响吧 它会重定向到default.aspx如果你一定要指定登陆后的页面,可以用ticket实现
    if(Authenticated(username, password))
    {
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(username,false, 30);
    string eTicket = FormsAuthentication.Encrypt(ticket);
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, eTicket));
    Response.Redirect("admin/admin.aspx");
    }
    else
    {
    lblWrongUser.Text="账号或密码不正确!";
    lblWrongUser.Visible=true;
    }
      

  13.   

    up,up哪位帮我解决了,在另送50分,5555555,急死我了
      

  14.   

    根目录下有两个页面 
    WebForm1.aspx 是首页
    bb.aspx
    是登陆页....webform1.aspx 当中
    private void Button1_Click(object sender, System.EventArgs e)
    {
    this.Response.Redirect ("bb.aspx?ReturnUrl=NewFolder\\WebForm1.aspx"); //NewFolder\webform1.aspx 是通过登陆后的起始页 }
      

  15.   

    那这样登录上去以后NewFolder下的其它页面也可以浏览了吗?不用传递什么session之类的东西过去?
      

  16.   

    可以的.这块也没有必要用 session 因为 .它本身是利用 cooke 来判断用户是否通过验证...
    当然你也可以用 session 更灵活些,也更安全.......不过比较麻烦些....
      

  17.   

    boytomato(深爱一人叫颖的女孩!) :我的登陆页和首页在一起,首页上有个登陆的窗口,用你的方法写了,还是回到了首页,地址栏显示:
    http://localhost/XGZX/index.aspx?ReturnUrl=admin\admin.aspx关键问题是,我现在很想知道,如果登陆后连接到admin\admin.aspx页面上去了,还可以直接访问admin文件夹下的其它页面吗?不需要传送session之类的值判断或是怎么样吗
    先前我用Sever.transfer(admin\admin.aspx),连接到admin\admin.aspx页面后,访问其它的页面就说不允许匿名访问了
      

  18.   

    谢谢你, boytomato(深爱一人叫颖的女孩!) ,你一直在给我回复,那我就不用session了,也不太会用。我只在web.config里设置了不允许匿名访问admin文件夹,重定向到login.aspx页面上,这个上面只是提示:禁止匿名访问
    我现在写的if(用户,密码正确)
    {
    this.Response.Redirect ("index.aspx?ReturnUrl=admin\\admin.aspx");
    lblWrongUser.Text="您可以进入管理系统了,离开时别忘了注销!";
    }
    else
    {
    }........可是不对啊
      

  19.   

    这个示例的作用是 NewFolder 所有aspx 页面都要通过验证后才能访问....
    它是一个受保护的目录....
      

  20.   

    我这是正常的,,不过我用的都是 this.Response.Redirect 
    不是Sever.transfer(
      

  21.   

    这个示例的作用是 NewFolder 所有aspx 页面都要通过验证后才能访问....
    它是一个受保护的目录....这个我知道,可是我按照你说的
    this.Response.Redirect ("index.aspx?ReturnUrl=admin\\admin.aspx");
    还是在index页面上没有到admin.aspx
    至于admin下的其它页面能不能访问就更不知道了。5555555555555
      

  22.   

    我没有用Sever.transfer了,可是写成this.Response.Redirect ("index.aspx?ReturnUrl=admin\\admin.aspx");
    没有动静啊,55555555
      

  23.   


    Server.Transfer("admin/admin.aspx");
    // Response.Redirect("admin/qgzxIndex.aspx");
    ???
    你所有页面的 Server.Transfer改成 Response.Redirect 试试,不是只在一个页面.....我和你快说不清了...你有 qq 或 msn我给你传过去...你自己看看吧
      

  24.   

    你看得是我以前会的
    现在我的代码整个是
    if(用户,密码正确)
    {
    this.Response.Redirect ("index.aspx?ReturnUrl=admin\\admin.aspx");

    }
    就一句
    我的qq:586871
      

  25.   

    用howie(flying fox)给的方法解决了
     boytomato(深爱一人叫颖的女孩!) 也多谢你了
    马上给分  ^_^