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");
}
设置Cookieprivate 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");
}
创建Cookiepublic 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,思路不太清晰,手头资料有限,真的困扰多日了,还往各位大侠一解多日之愁,拜谢拜谢。
<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");
}
设置Cookieprivate 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");
}
创建Cookiepublic 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,思路不太清晰,手头资料有限,真的困扰多日了,还往各位大侠一解多日之愁,拜谢拜谢。
解决方案 »
- “ASP.default_aspx”并不包含“DropDownList1_SelectedIndexChanged”的定义,是什么意思?
- IIS解释.aspx问题
- 在RowUpdating事件中娶不到值?
- 一个关于gridView的问题
- asp.net 怎么调用delphi 制作的activex控件
- 如何在DataGrid控件的行与行中间加一条虚线呢
- 请帮助菜鸟:DataView无法排序,大家请帮忙看一下代码!!
- 救命啊!!!!!!!
- 有个asp.net的开源 电子商务系统,叫什么m**to的, 谁知道是什么啊?
- 实现如Web迅雷式的自动安装客户端程序
- 如何调试安装类(在做安装部署的时候)?谢谢!
- 关于用程序控制server-u的问题 --急
谢谢web_gus
问题正在研究中,也希望各位师兄继续指教
<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);
//完成
就这么简单
<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获取的名称是计算机用户名,如何对应每一个登录用户设置写入身份验证票。
是的,我也只是在学习……,但是想到这个份上不把它研究出来还真是心里不痛快……
再次麻烦各位帮我看看啦。
【原创】ASP.NET 安全认证(一)—— 如何运用 Form 表单认证
【原创】ASP.NET 安全认证(二)——灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件