首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 虚拟主机评测对比
在Whidbey中实现Provider-.NET教程,评论及其它
作者:网友供稿 点击:3
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
本文由sam1111授权aspcool.com发表,未经作者许可,严禁转载。
  
  asp.net 2.0(codename whidbey)通过provider模式为用户验证、角色管理等方面提供了非常强大易用的框架模型。whidbey中提供了一个asp.net configuration工具,通过它可以非常容易地配置用户信息数据库,管理角色等等,再与新加入的security控件配合,几乎不用写什么代码就能够实现用户验证和角色管理功能。关于这些控件和配置工具的具体使用,可以参考这篇文章:使用更精简的代码保证 asp.net 应用程序的安全
  
  
  
  但是在pdc preview版本的whidbey中,这个配置工具的功能还不是很完善。从我使用的情况来看,它目前还只能创建和连接自己的demo用的access数据库,不能连接sql server数据库进行扩展。因此,为了能够连接sql server,我们必须提供我们自己的providers。这里以连接ibuyspy的portal数据库为例来说明如何实现一个membership provider。
  
  
  
  为了搞清楚如何实现我们自己的membership provider,有必要先看看whidbey默认使用的membership provider是如何做的。在machine.config配置文件中,whidbey使用类似下面这样的配置实现:
  
  
  
  <membership defaultprovider="aspnetaccessprovider" userisonlinetimewindow="15" >
  
   <providers>
  
   <add name="aspnetsqlprovider"
  
   type="system.web.security.sqlmembershipprovider, system.web, version=1.2.3400.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a"
  
   connectionstringname="localsqlserver"
  
   enablepasswordretrieval="false"
  
   enablepasswordreset="true"
  
   requiresquestionandanswer="false"
  
   applicationname="/"
  
   requiresuniqueemail="false"
  
   passwordformat="hashed"
  
   description="stores and retrieves membership data from the local microsoft sql server database"
  
   />
  
  
  
   <add name="aspnetaccessprovider"
  
   type="system.web.security.accessmembershipprovider, system.web, version=1.2.3400.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a"
  
   connectionstringname="accessfilename"
  
   enablepasswordretrieval="false"
  
   enablepasswordreset="true"
  
   requiresquestionandanswer="false"
  
   applicationname="/"
  
   requiresuniqueemail="false"
  
   passwordformat="hashed"
  
   description="stores and retrieves membership data from the local microsoft access database file"
  
   />
  
   </providers>
  
  </membership>
  
  
  
  关于这段配置文件的更详细解说,可以参考《a first look at asp.net v. 2.0》。
  
  
  
  可以看出,whidbey默认使用sqlmembershipprovider或者accessmembershipprovider来进行用户验证和管理。这两个provider实现了iprovider和imembershipprovider接口,实际上这两个接口也是每个membershipprovider所必需的,其中iprovider负责provider的初始化,而imembershipprovider则实现membershipprovider的主要功能。它们的定义如下:
  
  
  
  namespace system.configuration.provider
  
  {
  
   public interface iprovider
  
   {
  
   public string name { get; }
  
   public void initialize(string name,
  
   system.collections.specialized.namevaluecollection config);
  
   }
  
  }
  
  
  
  namespace system.web.security
  
  {
  
   public interface imembershipprovider
  
   {
  
   public bool changepassword(string name, string oldpwd,
  
   string newpwd);
  
   public bool changepasswordquestionandanswer(string name,
  
   string password,
  
   string newpwdquestion, string newpwdanswer);
  
   public system.web.security.membershipuser createuser(
  
   string username,
  
   string password, string email,
  
   out system.web.security.membershipcreatestatus status);
  
   public bool deleteuser(string name);
  
   public system.web.security.membershipusercollection getallusers();
  
   public int getnumberofusersonline();
  
   public string getpassword(string name, string answer);
  
   public system.web.security.membershipuser getuser(string name,
  
   bool userisonline);
  
   public string getusernamebyemail(string email);
  
   public string resetpassword(string name, string answer);
  
   public void updateuser(system.web.security.membershipuser user);
  
   public bool validateuser(string name, string password);
  
   public string applicationname {get; set;}
  
   public bool enablepasswordreset { get;}
  
   public bool enablepasswordretrieval { get;}
  
   public bool requiresquestionandanswer { get;}
  
   }
  
  }
  
  
  
  现在可以动手来实现我们自己的membershipprovider了:
  
  
  
  public class mymembershipprovider : iprovider, imembershipprovider
  
  {
  
   ……
  
  }
  
  
  
  验证功能是必需的:
  
  
  
  public bool validateuser (string name, string password)
  
  {
  
   string connectstr = configurationsettings.connectionstrings["portaldata"];
  
   sqlconnection myconnection = new sqlconnection (connectstr);
  
   sqlcommand mycommand = new sqlcommand ("userlogin", myconnection);
  
   mycommand.commandtype = commandtype.storedprocedure;
  
  
  
   // add parameters to sproc
  
   sqlparameter parameteremail = new sqlparameter ("@email", sqldbtype.nvarchar, 100);
  
   parameteremail.value = name;
  
   mycommand.parameters.add (parameteremail);
  
  
  
   sqlparameter parameterpassword = new sqlparameter ("@password", sqldbtype.nvarchar, 20);
  
   parameterpassword.value = password;
  
   mycommand.parameters.add (parameterpassword);
  
  
  
   sqlparameter parameterusername = new sqlparameter ("@username", sqldbtype.nvarchar, 100);
  
   parameterusername.direction = parameterdirection.output;
  
   mycommand.parameters.add (parameterusername);
  
  
  
   // open the database connection and execute the command
  
   myconnection.open ();
  
   mycommand.executenonquery ();
  
   myconnection.close ();
  
   if ((parameterusername.value != null) && (parameterusername.value != system.dbnull.value))
  
   return true;
  
  
  
   return false;
  
  }
  
  
  
  现在在web.config中可以这样配置connectionstring了:
  
  <connectionstrings>
  
   <add name="bugdepotdata" connectionstring="data source=(local);trusted_connection=true;database=portal" />
  
  </connectionstrings>
  
  
  
  这样,我们自己的一个简单的membershipprovider就基本上完成了。接下来需要配置web.config,让需要provider服务的控件能够认识它:
  
  <membership>
  
   <providers>
  
   <add name="mymembershipprovider"
  
   type="mymembershipprovider"
  
   appname="/" />
  
   </providers>
  
  </membership>
  
  
  
  这段设置是参考machine.config而来的,其中type属性的值是这样的字符串:
  
  type="providertype, assembly, version, culture, publickeytoken"
  
  由于我们的mymembershipprovider放在/code目录下,并不是在单独的assembly中,因此只需要指出providertype就行了。
  
  
  
  这样,一个具有验证功能的provider就完成了,现在可以在页面上放一个新的security控件,比如login控件,并指定它的membershipproperty为mymembershipprovider(或者也可以设置membership的defaultprovider属性为mymembershipprovider),打开forms验证,试试是不是已经能够成功登陆了?j

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·Asp.Net下导出/导入规则的Excel(.xls)文件-ASP教程,ASP应用
·中国万网,万网
·中资源
·上海火速
·加拿大中文网
·华夏名网
·世纪东方
·商务中国
·中国E动网
·神话网络
最新文章
·photoshop抠图合成特效:飞出照片相框_photoshop教程
·将升级的windows vista驱动还原到原来的版本_windows vista
·photoshop漫画笔刷绘制非主流照片漫画_photoshop教程
·看域名注册信息判断网赚公司真假_网赚技巧
·找坐标:对网站进行坐标定位_站长心得
·如何增加网站pv_站长心得
·google性格一:对活跃度高的网页收录很快_google推广
·googleadsense容易被k的可能性列表_google推广
·价值数万的googlepr作弊方_google推广
·如何抢占人家的“首要意念”_google推广
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭