窗口安全性验证机制设置无效,困扰多日,百分求助,谢谢各位。

日月星微 2005-11-16 09:17:21
Web.config

<authentication mode="Forms">
<forms loginUrl="index.aspx"/>
</authentication>

登录按钮单击事件

private void BTLogin_Click(object sender, System.EventArgs e)
{

......

//用户名和密码验证
int nErrorType = CValidate.ValidateAdmin(TBAdminLoginName.Text.Trim(),TBAdminPassword.Text.Trim());

......

//身份验证成功
UserInfo.AdminName = TBAdminLoginName.Text.Trim();

SetLoginCookie(UserInfo.AdminName,Convert.ToInt32(DDLCookieDays.SelectedValue));

// CUserCookie UserCookie = new CUserCookie(UserInfo);

Response.Redirect("Admin.aspx");
}


设置Cookie

private void SetLoginCookie(string userName, int cookieDays)
{
if (cookieDays == 0)
{
FormsAuthentication.SetAuthCookie(userName, false);
}
else
{
FormsAuthentication.SetAuthCookie(userName, true);
HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddDays(cookieDays);
}

//获取初始请求路径Url
string redirectUrl = FormsAuthentication.GetRedirectUrl(userName,true).ToLower();

if (redirectUrl.IndexOf("index.aspx") == -1)
Context.Response.Redirect(redirectUrl);
else
Context.Response.Redirect("index.aspx");
}


创建Cookie

public class CUserCookie
{

private HttpCookie UserCookie;
private string CookieName = "Apparel-CookieName";
private HttpContext Context = HttpContext.Current;
private CUserInfo User;

public CUserCookie(CUserInfo user)
{
CookieName = CookieName + "-" + user.AdminName;

UserCookie = Context.Request.Cookies[CookieName];
this.User = user;

if (UserCookie == null)
{
UserCookie = new HttpCookie(CookieName);
}
else
{
UserCookie = Context.Request.Cookies[CookieName];
}
}
}


假如不登录直接请求Admin.aspx页面

在加载事件中如下写:

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(HttpContext.Current.Request.IsAuthenticated == false)
{
string redirectUrl = FormsAuthentication.GetRedirectUrl(adminName,persist).ToLower();
if (redirectUrl.IndexOf("index.aspx") == -1)
HttpContext.Current.Response.Redirect(redirectUrl);
}
}



问题:

1:调用FormsAuthentication.SetAuthCookie()是应该自动创建身份验证票,并添加到Cookie的输出响应集合中,所以应该不用调用CUserCookie来创建;
2:如何在各个页面Http请求中检查是否已通过身份验证,用户是否具有身份验证票,而在向上述直接请求Admin.aspx发生时程序判断无效;
3:如何获取和登录用户名绑定的身份验证票,即已经存入Cookie输出响应集合中的状态,来判断当前用户没有身份验证票;
4:调试程序中的 FormsAuthentication.FormsCookieName 不是正确设置的CookieName,而是本地机器上的根目录下的网站名称,不得其解;
5:我想最主要的问题是对窗口身份验证的编程思路没有理顺,不知道如何设置,在哪儿设置。
6:查看他人已经设置好的Cookie机制时,发现每个页面请求都没有身份检查,不知道Asp.Net是不是在Web.config中配置好了后,以后每个请求都会自动检查。、

本人初学.NET,思路不太清晰,手头资料有限,真的困扰多日了,还往各位大侠一解多日之愁,拜谢拜谢。
...全文
217 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
日月星微 2005-12-03
  • 打赏
  • 举报
回复
问题告一段落

简单问题复杂化 没辙 呵呵

结帖相谢各位。
日月星微 2005-11-21
  • 打赏
  • 举报
回复
Up
谢谢cityhunter172。
cityhunter172 2005-11-21
  • 打赏
  • 举报
回复
看看我的博客,或許對你有所幫助 http://blog.csdn.net/cityhunter172/
【原创】ASP.NET 安全认证(一)—— 如何运用 Form 表单认证
【原创】ASP.NET 安全认证(二)——灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件
日月星微 2005-11-21
  • 打赏
  • 举报
回复
Up
日月星微 2005-11-21
  • 打赏
  • 举报
回复
谢谢leisang,我会尝试的。
是的,我也只是在学习……,但是想到这个份上不把它研究出来还真是心里不痛快……
再次麻烦各位帮我看看啦。
日月星微 2005-11-21
  • 打赏
  • 举报
回复
Web.config:

<httpModules>
<add name="ApparelHttpModule" type="Apparel.Engine.ApparelHttpModule,Apparel"/>
</httpModules>


ApparelHttpModule:

public class ApparelHttpModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.AuthenticateRequest +=new EventHandler(application_AuthenticateRequest);
}

private void application_AuthenticateRequest(object sender, EventArgs e)
{
HttpContext Context = HttpContext.Current;

CUserUtility.SetUserCookie();
}
}


SetUserCookie:

public static void SetUserCookie()
{
HttpContext Context = HttpContext.Current;

if (!Context.Request.IsAuthenticated) //?????
return;

string CookieName = "Apparel-CookieName" + ""; //?????

if ((Context.Request.Cookies[CookieName] == null) || (Context.Request.Cookies[CookieName].Value == ""))
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, // version
Context.User.Identity.Name, // user name
DateTime.Now, // issue time
DateTime.Now.AddHours(1), // expires every hour
false, // don't persist cookie
null // roles
);

//加密身份验证票
String cookieStr = FormsAuthentication.Encrypt(ticket);

//添加至输出响应
Context.Response.Cookies[CookieName].Value = cookieStr;
// Context.Response.Cookies[CookieName].Expires = DateTime.Now.AddMinutes(5);
}
else
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Context.Request.Cookies[CookieName].Value);
}

Context.User = new GenericPrincipal(Context.User.Identity,null);
}


问题:
1:参照别人的程序加入了验证模块,每次页面重新启动时都需要运行验证,但是Context.Request.IsAuthenticated总是为true。
2:不知如何绑定CookieName和登录用户名之间的关联,在模块中获取其登录用户名是无用的,必须是全局的用户标识值。
3:程序中暂不采用角色授权,而只是想利用Cookie机制来验证非法页面请求是无效的,不知道采用窗口验证机制是否恰当。
4:Context.User.Identity.Name获取的名称是计算机用户名,如何对应每一个登录用户设置写入身份验证票。
日月星微 2005-11-18
  • 打赏
  • 举报
回复
Up
日月星微 2005-11-18
  • 打赏
  • 举报
回复
Up
拜托各位高手啦,帮我看看吧,提示一下参考资料也行。。。
leisang 2005-11-18
  • 打赏
  • 举报
回复
<authentication mode="Forms">
<forms name=".TACenter" loginUrl="login.aspx" protection="All" timeout="60" path="/"/>
</authentication>

<authorization>
<deny users="?"/>
</authorization>

即可设置本网站为所有页面必须登录才可访问,而登陆页面设置为上面的login.aspx
另外详细设置cookie不是不行,但存储和提取都比较麻烦,如果不是特殊要求推荐以下方式:
//通过验证
.....
//设置验票 参数1:用户名 参数2:是否保存登录状态
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(username,true);
//完成


就这么简单
日月星微 2005-11-18
  • 打赏
  • 举报
回复
是不是采用FormsAuthentication.SetAuthCookie方法,必须设置FormsAuthentication.SetAuthCookie,问题是不是出在这里,但又如何关联和引用呢,希望大家帮我看看整个设置思路,指出来偏差和误区,谢谢。
日月星微 2005-11-18
  • 打赏
  • 举报
回复
Up
谢谢web_gus
问题正在研究中,也希望各位师兄继续指教。。。
web_gus 2005-11-18
  • 打赏
  • 举报
回复
http://search.csdn.net/lt/search.asp?key=forms+%C8%CF%D6%A4&pre=form+%D1%E9%D6%A4&option=nmlres&result=normal&page=1&size=10
wormwormwormworm 2005-11-16
  • 打赏
  • 举报
回复
up

62,074

社区成员

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

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

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

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