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

日月星微 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,思路不太清晰,手头资料有限,真的困扰多日了,还往各位大侠一解多日之愁,拜谢拜谢。
...全文
253 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
于2024年4月-2025年9月期间,研究团队在贵州习水国家级自然保护区制定39条样线,涵盖灌木林、常绿阔叶林、针叶林、常绿落叶阔叶混交林、针阔混交林等不同植被类型,每条样线分春夏秋冬4个季节采集样品,用真菌采集软件记录经纬度、海拔、采集地点、时间、生境等信息,使用佳能相机(R6 mark Ⅱ)对大型真菌进行拍照,并采集标本,标本存放于贵州省生物研究所大型真菌标本馆(HGAMF)。 通过形态学初步鉴定,结合分子生物学最终鉴定,参考已]报道的中国毒蘑菇名录开展毒蘑菇的认定。 调查到保护区内有毒真菌7目25科64种,导致中毒的主要类型有急性肾衰竭型、神经精神型和胃肠炎型。最终形成贵州习水国家级自然保护区大型有毒真菌图片数据集,它由以下2个部分组成。 (1)附件1包含78张原始照片(.JPG),照片名字包括了大型有毒真菌的拉丁名和中文名,若无中文名的直接用拉丁名。 (2)附件2是一个压缩文件,包含了2张工作表,其中一张表是大型有毒真菌39条样线的信息,另一张表是大型有毒真菌的中毒类型。 照片采用佳能相机R6 mark Ⅱ拍摄,物种鉴定通过多种文献核实,并经两位以上专家鉴定确认。该数据集可为研究地及周边的普通人识别有毒大型真菌提供参考,通过及时的图片对比,能有效避免误采误食大型有毒真菌,同时为因误食大型真菌可能引发的身体损伤进行了总结,能为患者及时治疗提供参考。

62,269

社区成员

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

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

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

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