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

ASP.NET
获取字符串数组的最后一段字符
asp.net遍历目录文件夹和子目录所有文件
ASP.NET 中文显示之两种解决方法
asp.net替换和恢复html特殊字符
asp.net简化接收参数值的函数
asp.net验证一个字符串是否符合指定的正则表达式
asp.net求3位不同数字的组合数
C#(.NET)数据访问连接、查询、插入等操作的封装类
在ASP.NET2.0中通过Gmail发送邮件的代码
asp.net下配置数据源时出现: 未将对象引用设置到对象的实例。
asp.net gridview强制换行
asp.net gridview多页时的批量删除
未处理的事件"PageIndexChanging" 之解决方案
gridview调整单元格宽度的方法
aspx如果引用cs中的变量的方法
asp.net导出EXCEL的功能代码
asp.net注册Javascript的方法
Asp.Net 文件操作基类
Asp.Net+XML操作基类(修改,删除,新增,创建)
asp.net 获取指定文件夹下所有子目录及文件(树形)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 221 ::
收藏到网摘: 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判断一下谁可以访问这页!