项目下面有3个页面:
login.aspx //登陆页面
index.aspx //首页
detail.aspx //其他页面
我在web.config中设置:
<authentication mode="Forms">
<forms name="CntoAuth" loginUrl="Login.aspx" protection="None" path="/"/>
</authentication>
我是想用户只有登陆之后才能访问 detail.aspx 页面。该怎么做啊
login.aspx //登陆页面
index.aspx //首页
detail.aspx //其他页面
我在web.config中设置:
<authentication mode="Forms">
<forms name="CntoAuth" loginUrl="Login.aspx" protection="None" path="/"/>
</authentication>
我是想用户只有登陆之后才能访问 detail.aspx 页面。该怎么做啊
<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="用户名:"/>
<asp:Textbox id="txtUsername" runat="server"/>
<br>
<br>
<asp:Label id="lblPassword" runat="server" Text="密 码:"/>
<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>
</System.Web>
中加:
<authentication mode="Forms" >
<forms name=".ASPXUSERDEMO" loginUrl="login.aspx" protection="All"
timeout="60" />
</authentication>
<deny users="?" />
</authorization>
login.aspx //登陆页面
index.aspx //首页
这2个页面可以不需要登陆就之间访问。
而detail.aspx //其他页面
这个页面只有通过验证才能访问。
这3个页面都在同一文件夹下面。这个该怎么实现啊?
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
也许对你有用。
最近在看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设置
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 ;可以取得当前的用户名。
但是我怎么才能取的当前用户是什么角色呢?