当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET Forums与现有系统整合方案示例

ASP.NET
Visual Studio.Net 内幕(7)
.Net 2.0 原汁原味读取注册表
ASP.NET 2.0中预设的cookie
ASP.NET:一段比较经典的多线程学习代码
ASP.NET2.0服务器控件之自定义状态管理
Asp.net给站点某目录增加Aspnet用户
ASP.NET技巧:请求网址并解析返回的html
在Asp.net用C#建立动态Excel
ASP.NET2.0:页面中链入的CSS、js文件带中文时需注意
ASP.NET技巧:数据岛出到Excel最为简易的方法
第一次用.net2.0 LOGIN登陆控件的困惑和解决方法
在ASP.net中保存/取出图片入/从SQL数据库
ASP.NET技巧:做个DataList可分页的数据源
在.NET中利用委托实现窗体间通信
在.NET2.0中使用自定义事务操作
解决 ASP.NET中目录访问权限的问题
ASP.Net防止刷新自动触发事件的解决方案
白刃之战:PHP vs. ASP.NET(节选)-架构比较
C#中使用SendMessage
提取HTML代码中文字的C#函数

ASP.NET Forums与现有系统整合方案示例


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 135 ::
收藏到网摘: n/a

Asp.NetForums以下简称ANF,版本2.0,本文系数流水帐,只是记录了一下今的工作,没啥技术含量。

已有系统已经有自己的一套用户系统,需要挂接ANF,要求在已有系统用户注册,登录,修改密码时,在ANF中也做出相应反映。不要求ANF的用户变化影响已有系统,只是单向同步。

在尽量少动已有代码的情况下找一种简单的方式来完成整合。之前看了宝玉的CnForums和已有系统的整合方案,最后偷懒决定在已有系统上述动作结束后将用户相关信息和操作类型附加在url后面传给一个新建页来处理在ANF中执行相关操作。

这新建页暂且叫bridge.aspx当然要建在ANF的项目中该using的都using了,负责接收用户名密码等信息然后执行相应的ANF操作。

注册

注册很简单,我的Username和Password是自己包装的属性,从Request中获取信息,我们系统没有Email就随便添一个,接下来要给AccountStatus设置为通过,IsAnonymous关掉。Users.Create中那个bool参数代表是否给用户发送注册成功提示的邮件,我没邮件当然关掉。

注意我在所有的地方都catch吸收掉错误,而无返回,你不一定要这么做。

publicvoidRegister()
{
 try
 {
Useruser=newUser();
user.Username=Username;
user.Password=Password;
user.Email="[email protected]";
user.AccountStatus=UserAccountStatus.Approved;
user.IsAnonymous=false;
Users.Create(user,false);
 }
 catch
 {
 }
}

登录

基本上都是复制粘贴过来的,注意最后的setcookie,这是同步登录的关键。

publicvoidLogin()
{
 try
 {
UseruserToLogin=newUser();
userToLogin.Username=Username;
userToLogin.Password=Password;

LoginUserStatusloginStatus=Users.ValidUser(userToLogin);

if(loginStatus==LoginUserStatus.Success)
{
 if(!Globals.GetSiteSettings().AllowLogin)
 {
boolallowed=false;

intuserid=Users.FindUserByUsername(userToLogin.Username).UserID;
ArrayListroles=Roles.GetRoles(userid);

foreach(Roleroleinroles)
{
 if(role.Name=="SiteAdministrators"||role.Name=="GlobalAdministrators")
 {
allowed=true;
break;
 }
}
if(!allowed)
{
 return;
}
 }
 set_Cookie(userToLogin.Username,"1");
}
 }
 catch
 {
 }
}

修改密码

这个假设是基于登录已经发生的,如果你的假设不是这样需要加入自己的判断。

publicvoidChangePassword()
{
 try
 {
ForumContextforumContext=ForumContext.Current;
Useruser=forumContext.User;
if(user!=null)
{
 user.ChangePassword(Password,NewPassword);
}
 }
 catch
 {
 }
}

设置cookie

publicvoidset_Cookie(stringUsername,stringSelet_item)
{
 if(Selet_item=="0")
 {
FormsAuthentication.SetAuthCookie(Username,false);
 }
 else
 {
ForumContextforumContext=ForumContext.Current;
FormsAuthentication.SetAuthCookie(Username,true);
forumContext.Context.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.
_Now.AddDays(System.Convert.ToInt32(Selet_item));
 }
}

最后在已有系统的注册,登录,修改的最后Response.Redirect这页就ok,不喜欢Redirect,Server.Transfer,xmlhttp都行,看你需要的展现了。还有一点很关键,就是要加密了你传输的字符串,要不明文就……※¥※×%※×,要是嫌还不安全就用ip判断一下谁可以访问这页!