一个Form验证的方案
来源:互联网 发布:远程软件有哪些 编辑:程序博客网 时间:2024/05/22 08:28
asp.net自己带了一个可以自动生成认证的类,但这个FormsAuthentication自动的Cookie除了包含认证票据以外,不能自己带其它的数据。
而对于一个项目来说,可能要对浏览者进行不同类型的验证,而对于asp的写法来说,就是用session来验证。我不喜欢这样的方法,而且这样的话也就不能实现自动登录了。
还好,.net里带了一个可以自己定义票据的方法,这样我们一方面可以进行自动登录,另一方面还可以对不用的用户进行验证。下面是一个生成票据的代码:
public virtual void Login(bool i_autoLogin)
{
string m_userData = this.m_userID.ToString()+","+this.m_loginName+","+this.m_userType.ToString();
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
"WebbUser",
System.DateTime.Now,
System.DateTime.Now.AddDays(30),
i_autoLogin,
m_userData,
"/");
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpContext.Current.Response.Cookies.Add(new HttpCookie("WebbUser", encTicket));
}
其中m_userData可以是很长的字符串,而且生成的cookies经过了加密(简单的)。显然,这里只是会记录一些用户ID,TYPE等信息,不会记录密码等重要信息,当然也不会有什么太大的问题。接下来就是如何取得cookies里的信息并且加以认证。
取回cookies:
protected void GetDataFromCookie()
{
if(User.Identity.IsAuthenticated)
{
string m_userData;
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
m_userData = ticket.UserData;
if(m_userData!=null)
{
SetUserData(m_userData);
}
}
}
private void SetUserData(string m_Data)
{
string[] m_string = m_Data.Split(new char[]{','});
if(m_string.Length==3)
{
this.m_user.UserID = Convert.ToInt64(m_string[0]);
this.m_user.LoninName = m_string[1];
this.m_user.UserType = PageHelper.ConvertToUserTypes(m_string[2]);
}
}
显然这里我用了‘,’来分隔用户信息,其中我添加了三条用户信息,一条为用户ID,一条为用户名,最后一条为用户类型。而且在取回信息的时候,用它来给m_user对象赋值。
下面就是来验证它了:首先写一个基类(BasePage),以后所有的Form都从它派生,这样就可以自动验证用户了。它里面写一个可重载函数,用于对不同的页面进行判断:
#region IUIPage Members
virtual public bool CheckUserType(){return false;}
virtual public void InitUser(object sender, EventArgs e){}
#endregion
而且在页面载入的时候进行验证:
public void BasePage_Load(object sender, System.EventArgs e)
{
if(!CheckUserType())
{
this.UserSignOut();
}
}
而实现的验证代码在不同的页面里:例如一个Admin_Main.aspx.cs里,它的验证可能是这样的:
public override bool CheckUserType()
{
return this.m_user.UserType==UserTypes.Admin?true:false;
}
public override void InitUser(object sender, EventArgs e)
{
this.m_user = new WebbAdmin2() as IVisitor;
this.GetDataFromCookie();
}
而在Client_Main.aspx.cs里可能是这样的:
public override bool CheckUserType()
{
return this.m_user.UserType==UserTypes.Client?true:false;
}
public override void InitUser(object sender, EventArgs e)
{
this.m_user = new WebbClient() as IVisitor;
this.GetDataFromCookie();
}
- 一个Form验证的方案
- 一个关于form表单验证的js
- 一个写的挺干净的form表单验证,简洁
- 利用Jquery实现一个典型的form表单前端验证
- javascript的Form验证
- form的onsubmit验证
- form的onsubmit验证
- form的onsubmit验证
- Form表单的验证
- form的onsubmit验证
- form的onsubmit验证
- 一个不怕机器识别的图形验证码方案
- 一个简单的前端JavaScript手机号码输入验证方案
- WPF的验证方案
- FORM登录的WINDOWS验证
- form表单验证的原理
- asp.net的Form验证
- jQuery的form表单验证
- 实现Command模式
- 实现Command模式
- JavaScript实现cookies设置【读,增,删,修等操作】
- 为什么我们总是比别人钱少?
- 《禅说》摘录
- 一个Form验证的方案
- 读博士的经验
- CRC算法与实现
- Struts配置文件详细讲解
- File 类小结
- My View on the Web tech in future
- java对Ldap操作4
- 【转载】 解决Geotools中文问题的一个新的想法
- 用SQL只获取日期的方法