萌萌妈妈 发表于 2015-1-16 23:46:47

ASP网站制作之Forms考证中的roles

asp,jsp,php是web开发的三大技术,asp简单易用且有microsoft做靠山,jsp功能强大是因为有java支持,php则开源跨平台.在国内,asp应用范围最广,jsp发展势头最猛,php则处于劣势.这可能与公司的支持以及技术的培训有关.一向对forms考证中的脚色很含混,不晓得怎样弄,今天早晨细心看了下csdn的杂志,内心略微有点底,明天凌晨一上csdn,就看到思回年夜人回的一篇贴,是关于asp.net中的forms考证roles,地点是:http://www.codeproject.com/aspnet/formsroleauth.asp
汗,怎样是E文,我的e文特差,可是不晓得为何此次居然被我看懂了,仿照他的做,居然乐成!,特把历程和我的了解写出来,但愿对和我一样的菜鸟有点匡助,同时我的一些了解大概毛病,但愿列位老迈们可以指出,十分感激,上面我入手下手边翻译边依照他的做:
1,起首我们新建一个数据库,名字叫web,增加一个表叫users,内里有三个字段,username字段为主键,username和password字段设置为团结索引,不晓得我如许了解对么?请斧正
CREATE
DATABASEwebCREATETABLEusers
(
usernamenvarchar(64)CONSTRAINTusers_PKPRIMARYKEY,
passwordnvarchar(128),
rolesnvarchar(64)
)
CREATEINDEXcredentialsONusers
(
username,
password
)
我们再在users表中增加两个用户:pwqzc123456Administrator,User
pwq123456User
第一个为名字,第二个为暗码,第三个为用户所具有的脚色,多个脚色用,逗号分隔
2,创立一个上岸页login.aspx
内里放两个TextBox和一个按钮,在按钮的单击事务里写代码:
privatevoidbtnLogin_Click(objectsender,System.EventArgse)
{
//初始化FormsAuthentication
FormsAuthentication.Initialize();
//创立个connection和command工具
SqlConnectionconn=newSqlConnection("server=(local);uid=sa;pwd=mydream54win;database=web");
SqlCommandcmd=conn.CreateCommand();
cmd.CommandText="selectrolesfromuserswhereusername=@usernameandpassword=@password";
//增加参数和给参数赋值
cmd.Parameters.Add("@username",SqlDbType.VarChar,64);
cmd.Parameters["@username"].Value=Username.Value;
cmd.Parameters.Add("@password",SqlDbType.VarChar,128);
cmd.Parameters["@password"].Value=Password.Value;
//翻开数据库毗连
conn.Open();
//实行命令
SqlDataReaderreader=cmd.ExecuteReader();
if(reader.Read())
{
//创立一个新的考证票FormsAuthenticationTicket
FormsAuthenticationTicketticket=newFormsAuthenticationTicket(
1,//票版本号
Username.Value,//cookie名字
DateTime.Now,//天生cookie工夫
DateTime.Now.AddMinutes(30),//cookie的无效工夫
false,//是否是永世存在的cookie
reader.GetString(0));//从数据库读到的用户脚色数据
//把考证票加密
stringhashTicket=FormsAuthentication.Encrypt(ticket);
//设置考证票cookie,第一个参数为cookie的名字,第二个参数为cookie的值也就是加密后的票
HttpCookiecookie=newHttpCookie(FormsAuthentication.FormsCookieName,hashTicket);
//设置cookie的无效期是一个星期
cookie.Expires=DateTime.Now.AddDays(7);
//把cookie加进Response工具产生到客户端
Response.Cookies.Add(cookie);
//失掉哀求的url
stringrequestUrl=FormsAuthentication.GetRedirectUrl(FormsAuthentication.FormsCookieName,false);
//不要利用FormsAuthentication.RedirectFromLoginPage办法,由于这个办法会重写cookie
//从头定向到哀求的url
Response.Redirect(requestUrl);
}
else
{
//假如不存在此用户,则提醒一些毛病
ErrorLabel.Text="用户名大概暗码毛病,请重试!";
ErrorLabel.Visible=true;
}
//封闭数据库毗连和reader
reader.Close();
conn.Close();
}

3,第三步,在使用程序的Global.asax中,找到Application_AuthenticateRequest,写上面代码,记的要导进usingSystem.Security.Principal;
usingSystem.Web.Security;这两个名字空间,代码以下:
protectedvoidApplication_AuthenticateRequest(Objectsender,EventArgse)
{
if(HttpContext.Current.User!=null)//假如以后的http信息中存在用户信息
{
if(HttpContext.Current.User.Identity.IsAuthenticated)//假如以后用户的身份已经由过程了考证
{
if(HttpContext.Current.User.IdentityisFormsIdentity)
{
//假如以后用户身份是FormsIdentity类即窗体考证类,此类有个属功能够会见以后用户的考证票
FormsIdentityfi=(FormsIdentity)HttpContext.Current.User.Identity;//创立个FormsIdentity类,用他来会见以后用户的考证票
//取得用户的考证票
FormsAuthenticationTicketticket=fi.Ticket;
//从考证票中取得用户数据也就是脚色数据
stringuserData=ticket.UserData;
//把用户数据用,分化成脚色数组
string[]roles=userData.Split(,);
//重写以后用户信息,就是把脚色信息也到场到用户信息中
HttpContext.Current.User=newGenericPrincipal(fi,roles);
}
}
}
}
4,第四步,修正web.config
<configuration>
<system.web>
<authenticationmode="Forms">
<formsname="MYWEBAPP.ASPXAUTH"
loginUrl="login.aspx"
protection="All"
path="/"/>
</authentication>
<authorization>
<allowusers="*"/>
</authorization>
</system.web>
<locationpath="admins">
<system.web>
<authorization>
<!--Orderandcaseareimportantbelow-->
<allowroles="Administrator"/>
<denyusers="*"/>
</authorization>
</system.web>
</location>
<locationpath="users">
<system.web>
<authorization>
<!--Orderandcaseareimportantbelow-->
<allowroles="User"/>
<denyusers="*"/>
</authorization>
</system.web>
</location>
</co
问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.

仓酷云 发表于 2015-1-19 11:10:22

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。

金色的骷髅 发表于 2015-1-24 12:19:06

ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。

爱飞 发表于 2015-2-1 10:37:12

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:

乐观 发表于 2015-2-7 03:55:53

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

简单生活 发表于 2015-2-20 10:42:36

Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")

老尸 发表于 2015-3-6 16:52:48

ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。

飘灵儿 发表于 2015-3-13 04:18:45

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

小女巫 发表于 2015-3-20 12:38:07

不能只是将它停留在纸上谈兵的程度上。
页: [1]
查看完整版本: ASP网站制作之Forms考证中的roles