form验证问题请教
项目下面有3个页面:
login.aspx //登陆页面
index.aspx //首页
detail.aspx //其他页面
我在web.config中设置:
<authentication mode="Forms">
<forms name="CntoAuth" loginUrl="Login.aspx" protection="None" path="/"/>
</authentication>
我是想用户只有登陆之后才能访问 detail.aspx 页面。该怎么做啊
问题点数:50、回复次数:12Top
1 楼tigerwen01(小虎)回复于 2005-07-20 12:17:46 得分 20
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="用户名:"/>
<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>
Top
2 楼ChengKing((.net: http://blog.csdn.net/ChengKing ))回复于 2005-07-20 12:20:13 得分 0
在: <System.Web>
</System.Web>
中加:
<authentication mode="Forms" >
<forms name=".ASPXUSERDEMO" loginUrl="login.aspx" protection="All"
timeout="60" />
</authentication>
Top
3 楼Truly()回复于 2005-07-20 12:42:34 得分 0
<authorization>
<deny users="?" />
</authorization>Top
4 楼gengxin_914(星星)回复于 2005-07-22 10:33:06 得分 0
可能是我没有表达清楚,我想
login.aspx //登陆页面
index.aspx //首页
这2个页面可以不需要登陆就之间访问。
而detail.aspx //其他页面
这个页面只有通过验证才能访问。
这3个页面都在同一文件夹下面。这个该怎么实现啊?
Top
5 楼huis(暂住制度在中国害苦人啊)回复于 2005-07-22 11:05:11 得分 0
不懂,学习Top
6 楼Truly()回复于 2005-07-22 12:52:55 得分 20
<location path="index.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>Top
7 楼kgdiwss(∮明天去要饭)回复于 2005-07-22 13:10:28 得分 0
http://blog.csdn.net/kgdiwss/archive/2005/02/24/299652.aspx
也许对你有用。Top
8 楼jimu8130(火箭的未来在哪里?)回复于 2005-07-22 13:30:51 得分 0
学习ingTop
9 楼yb2008(中科商务网--ZKE360.COM)回复于 2005-07-22 14:22:16 得分 10
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设置
Top
10 楼flying310(林林)回复于 2005-07-22 14:22:45 得分 0
在程序中用session吧,何必非要在webconfig中配置呢?Top
11 楼yb2008(中科商务网--ZKE360.COM)回复于 2005-07-22 14:23:02 得分 0
第5点比较适合于你的这种情况Top
12 楼gengxin_914(星星)回复于 2005-07-22 15:33:40 得分 0
我用: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 ;可以取得当前的用户名。
但是我怎么才能取的当前用户是什么角色呢?Top




