webconfig身份验证
2008-09-07 16:58
225 查看
一、问题描述:有两种用户,买方,卖方;在数据库中分别有两个用户表。要求:网站根目录下有两个目录假设为DW目录、GR目录。目录下都
有一个login.aspx文件,分别是dwlogin.aspx,grlogin.aspx,登录时分别用自己的login.aspx文件,登录后不能访问对方的目录。
二、总体思路:创建自定义的身份验证票据,将roles信息放在票据的userData中.
三、设置Web.config
loginUrl="login.aspx"//根目录中的,就是下面的第六条
protection="All"
path="/"/>
//这里必须用*,用?达不到要求
四、DWLogin.aspx中
private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie objCookie;
string strReturnURL;
if (IsValid)
{
switch (GetUser( Username.Text,Password.Text))// GetUser函数得到用户名和密码,正确返回0,密码错返回2
,用户名错返回1
{
case 0:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
Username.Text,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
"DW");//我是直接写进去的,可能还有更好的方法
objCookie = new HttpCookie( =(".ASPXAUTH" );
objCookie.Value = FormsAuthentication.Encrypt( ticket );
Response.Cookies.Add( objCookie );
strReturnURL = Request.Params[ "ReturnURL" ];
if ( strReturnURL != null )
{
Response.Redirect( strReturnURL );//返回到原来访问的页面
}
else
{
Response.Redirect( "Default.aspx" );//这里也可以设置你想设置的页面
}
break;
case 1:
this.Page.RegisterStartupScript("Info","");
break;
case 2:
this.Page.RegisterStartupScript("Info","");
break;
}
}
}
个人的登录页面GRLogin.aspx中写法同上面
五、Global.asax中添加如下代码:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id =(FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string userData = ticket.UserData;
string[] roles = userData.Split(’,’);
HttpContext.Current.User = new GenericPrincipal(id, roles);
}
}
}
}
六、根目录下建login.aspx,其中添加如下代码:(这个login.aspx没有用户名和密码输入框,主要是用来重定位各自的登录页面)
private void Page_Load(object sender, System.EventArgs e)
{
string ParamName = "ReturnUrl";
string ReturnUrl = Request.QueryString[ParamName];
if (ReturnUrl.ToLower().IndexOf("DW") >=0)
{
Response.Redirect("DW/DWLogin.aspx?" + ParamName + "=" + ReturnUrl);
}
else if (ReturnUrl.ToLower().IndexOf("GR") >=0 )
{
Response.Redirect("GR/GRLogin.aspx?" + ParamName + "=" + ReturnUrl);
}
else
{
//这里添加一些你的提示,指定页面也可以
}
}
有一个login.aspx文件,分别是dwlogin.aspx,grlogin.aspx,登录时分别用自己的login.aspx文件,登录后不能访问对方的目录。
二、总体思路:创建自定义的身份验证票据,将roles信息放在票据的userData中.
三、设置Web.config
loginUrl="login.aspx"//根目录中的,就是下面的第六条
protection="All"
path="/"/>
//这里必须用*,用?达不到要求
四、DWLogin.aspx中
private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie objCookie;
string strReturnURL;
if (IsValid)
{
switch (GetUser( Username.Text,Password.Text))// GetUser函数得到用户名和密码,正确返回0,密码错返回2
,用户名错返回1
{
case 0:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
Username.Text,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
"DW");//我是直接写进去的,可能还有更好的方法
objCookie = new HttpCookie( =(".ASPXAUTH" );
objCookie.Value = FormsAuthentication.Encrypt( ticket );
Response.Cookies.Add( objCookie );
strReturnURL = Request.Params[ "ReturnURL" ];
if ( strReturnURL != null )
{
Response.Redirect( strReturnURL );//返回到原来访问的页面
}
else
{
Response.Redirect( "Default.aspx" );//这里也可以设置你想设置的页面
}
break;
case 1:
this.Page.RegisterStartupScript("Info","");
break;
case 2:
this.Page.RegisterStartupScript("Info","");
break;
}
}
}
个人的登录页面GRLogin.aspx中写法同上面
五、Global.asax中添加如下代码:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id =(FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string userData = ticket.UserData;
string[] roles = userData.Split(’,’);
HttpContext.Current.User = new GenericPrincipal(id, roles);
}
}
}
}
六、根目录下建login.aspx,其中添加如下代码:(这个login.aspx没有用户名和密码输入框,主要是用来重定位各自的登录页面)
private void Page_Load(object sender, System.EventArgs e)
{
string ParamName = "ReturnUrl";
string ReturnUrl = Request.QueryString[ParamName];
if (ReturnUrl.ToLower().IndexOf("DW") >=0)
{
Response.Redirect("DW/DWLogin.aspx?" + ParamName + "=" + ReturnUrl);
}
else if (ReturnUrl.ToLower().IndexOf("GR") >=0 )
{
Response.Redirect("GR/GRLogin.aspx?" + ParamName + "=" + ReturnUrl);
}
else
{
//这里添加一些你的提示,指定页面也可以
}
}
相关文章推荐
- asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)
- web.config 限定访问权限 Asp.net的身份验证有有三种
- web.config 限定访问权限 Asp.net的身份验证有有三种
- ASP.NET 下web.config Forms身份验证的配置
- Asp.net WebConfig 身份验证 增加针对PHP 验证 Asp.net WebConfig 身份验证 增加 PHP 验证
- Web.config中能否用Widows身份验证连接SQL 2005数据库
- ASP.NET的Web.config文件中可配置哪些身份验证方式
- Web.config配置内容中Asp.net 的身份验证问题
- Web.config配置身份验证
- ASP.NET 下web.config Forms身份验证的配置
- Web.Config 文件中的设置配置网页身份验证
- 具有身份验证的web.config
- 在asp.net使用web.config身份验证
- 具有身份验证的web.config
- web.config 关于froms 的身份验证基本原理
- 对文本框中密码加密,对web.config中字符串的加密,身份验证
- web.config 限定访问权限 Asp.net的身份验证有有三种
- asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)
- 在asp.net使用web.config身份验证
- Web用户的身份验证及WebApi权限验证流程的设计和实现