forms验证:怎么验证两种身份?

L3772 2005-06-13 05:22:20
在某些网站上会有两中身份的用户,比如商务网站上有买方和卖方,对于他们应该分别进行身份验证,请问怎么验证(用forms验证)?

描述:
根目录下有两个目录:A目录、B目录。目录下都有一个login.aspx文件,买方登录后可以访问A目录,卖方登录后可以访问B目录当。买方登录后不能访问B目录,同样卖方登录后不能访问A目录。
不分别建立虚拟目录,请问怎么实现?
...全文
369 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenhit2 2005-09-05
  • 打赏
  • 举报
回复
我以给个原程序参考一下嘛~我是刚学asp.net的,就是不会用from验证~先谢啦
我的邮箱是:fdsaz@126.com
canghaiyisujsg 2005-09-05
  • 打赏
  • 举报
回复
mark
adandelion 2005-08-18
  • 打赏
  • 举报
回复
SC
liuqinglq 2005-07-27
  • 打赏
  • 举报
回复
标记,很有用的东西……
batistuta97 2005-07-26
  • 打赏
  • 举报
回复
mark
D_majia 2005-07-26
  • 打赏
  • 举报
回复
做记号^_^
L3772 2005-06-15
  • 打赏
  • 举报
回复
太好了,谢谢,谢谢。成功了。
L3772 2005-06-14
  • 打赏
  • 举报
回复
saucer(思归)大哥,用你的方法做,不管用哪个登录后都能互相访问。也就是说,个人用户登录后可以访问单位目录,单位用户登录后可以访问个人目录。怎么控制他们不能互相访问啊?
saucer 2005-06-14
  • 打赏
  • 举报
回复
对买/卖方设置角色, 参考下面这个帖子里我的回答

http://community.csdn.net/Expert/TopicView.asp?id=4071521
tigerwen01 2005-06-14
  • 打赏
  • 举报
回复
我想给楼主提个建议,要完成你所说的功能,我看还是使用数字证书比较好。你可以分别向用户A和B颁发一帐个人证书。证书里分别存有A和B的个人信息和私钥。
A和B的证书序列号是不相同的并且是唯一的,可以取出序列号放近数据库里作为登陆时验证用。
L3772 2005-06-14
  • 打赏
  • 举报
回复
fancyf(凡瑞)的意思大概理解了,但不太适合,可能是我说的不太清楚。因为两种用户的基本信息是不同的,信息分别储存在两个表中,单位表和个人用户表。也就是说,在表中没有roles信息。请问这样以来应该怎样验证?
e_lb 2005-06-14
  • 打赏
  • 举报
回复
前几天我也提了与楼主类似的问题,研究了几天现在有个大概结果,发出来,你看合适你不。

一、问题描述:有两种用户,买方,卖方;在数据库中分别有两个用户表。要求:网站根目录下有两个目录假设为DW目录、GR目录。目录下都

有一个login.aspx文件,分别是dwlogin.aspx,grlogin.aspx,登录时分别用自己的login.aspx文件,登录后不能访问对方的目录。

二、总体思路:创建自定义的身份验证票据,将roles信息放在票据的userData中.

三、设置Web.config
<configuration>
<system.web>
<authentication mode="Forms">
<forms name=".ASPXAUTH"
loginUrl="login.aspx"//根目录中的,就是下面的第六条
protection="All"
path="/"/>
</authentication>
</system.web>
<location path="DW">
<system.web>
<authorization>
<allow roles="DW"/>
<deny users="*" />//这里必须用*,用?达不到要求
</authorization>
</system.web>
</location>
<location path="GR">
<system.web>
<authorization>
<allow roles="GR"/>
<deny users="*" />
</authorization>
</system.web>
</location>
<location path="/DW/DWLogin.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="GR/GRLogin.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
四、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","<script>alert('该用户不存在!!');</script>");
break;
case 2:
this.Page.RegisterStartupScript("Info","<script>alert('密码错误!!');</script>");
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
{
//这里添加一些你的提示,指定页面也可以
}
}

boytomato 2005-06-14
  • 打赏
  • 举报
回复
http://www.codeproject.com/aspnet/formsroleauth.asp

有demo 的,可以下..你注册一下....
renyu732 2005-06-14
  • 打赏
  • 举报
回复
up
L3772 2005-06-14
  • 打赏
  • 举报
回复
saucer(思归)大哥,怎么设置roles?在哪里设置?能给个具体的例子吗?
L3772 2005-06-14
  • 打赏
  • 举报
回复
saucer(思归)大哥,我汗都出来了。再问个问题:怎么设置roles啊?
saucer 2005-06-14
  • 打赏
  • 举报
回复
假如你设了不同role的话,不应该的,类似这样的

<location path="A"> ===>A目录
<system.web>
<authorization>
<allow roles="role_A" /> ===>只有role_A角色能访问
<deny users="*" />
</authorization>
</system.web>
</location>


<location path="B"> ===> B目录
<system.web>
<authorization>
<allow roles="role_B" /> ===> 只有role_B角色能访问
<deny users="*" />
</authorization>
</system.web>
</location>

boytomato 2005-06-13
  • 打赏
  • 举报
回复
http://www.cnblogs.com/gwazy/archive/2005/05/18/158242.html



http://www.cnblogs.com/gwazy/archive/2005/05/19/158993.html

http://www.cnblogs.com/gwazy/archive/2005/06/02/166497.html


fengyi999 2005-06-13
  • 打赏
  • 举报
回复
mark
Overriding 2005-06-13
  • 打赏
  • 举报
回复
基于角色的身份验证
加载更多回复(1)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧