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

ASP.NET
Asp.net Ajax--Calendar控件使用
让ASP.NET程序自动为URL加上超级链接
ASP.NET2.0MasterPage技巧总结
asp.net读取数据库乱码的解决完全方案
asp.net中生成缩略图并添加版权
ASP.Net用MD5和SHA1加密的几种方法
asp.net客户端回调功能的实现机制
ASP.NET2.0中控件的简单异步回调
用在JavaScript的RequestHelper
用Java发送图文并茂的HTML邮件
基于.NET平台的分层架构实战(一) 综述
基于.NET平台的分层架构实战(二)需求分析与数据库设计
基于.NET平台的分层架构实战(三)架构概要设计
基于.NET平台的分层架构实战(四)实体类的设计与实现
近期的几个ASP.NET开发经验总结和收集
ASP.NET中的状态管理
asp.net基础知识介绍
对数据访问层第一种实现(Acc+SQL)的重构
.NET初学者推荐课程 asp.net错误代码大全
在.net中如何利用数据工厂实现多数据库的操作

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


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