导航

解决 Asp.net Froums 与网站同步登陆的问题

Posted on 2007-05-10 23:37  yxian  阅读(370)  评论(0编辑  收藏  举报

今天的工作主要是解决 Asp.net Froums 与网站同步登陆的问题
我想过很多办法:
第一个办法是发xml包,调试的时候报错:“远程服务器返回错误: (401) 未经授权” 上网查了一下说什么密码不同步 ,肯定一时半会弄不好! !!( 放弃之)
第二个办法想到webservice不过上网一查有url传参的现成方法简单实用就用它了。下面详细介绍一下,希望对大家能起点抛砖引玉的作用。
注册和修改密码很简单不用带url传值,直接一次插2个user表就行。
下面的代码意思是网站注册和修改密码时候同时注册和修改Forum表:

  #region  注册Forum会员
  public void Insertforums_Users()
  {
   try
   {
    //插入forums_User表
    SqlConnection myConnection=new SqlConnection(ConfigurationSettings.AppSettings["BBSConnectionString"]);
    string passwordmd5=Common.CommonClass.MD5(PassWord);
    string sqlstr=@"insert into forums_Users (UserName,PassWord,Email,NickName)
          Values('"+UserName+"','"+passwordmd5+"','"+this.Email+"','"+this.UserName+"') SELECT @@IDENTITY AS 'NewUserID'";
    SqlDataAdapter myDA=new SqlDataAdapter(sqlstr,myConnection);
    myConnection.Open();
    myDA.Fill(this.myDS,"Users");
    if(this.myDS!=null)
    {
     this.ForumUserID=this.myDS.Tables[0].Rows[0][0].ToString();
    }
    //插入forums_UserProfile表
    sqlstr="insert into forums_UserProfile (UserID) Values ('"+this.ForumUserID+"')";
    SqlCommand myCommand = new SqlCommand(sqlstr,myConnection);
    myCommand.CommandType = CommandType.Text;
    myCommand.ExecuteNonQuery();
    myConnection.Close();
   }
   catch(Exception  ee)
   {
    throw ee;
   }

  }
  #endregion

  #region 更新Forum会员密码
  protected void UpDateforums_User(string passWord)
  {
   try
   {
    //查找此网站用户的用户名
    IStatement stmt=NDOManager.Instance .CreateStatement();
    stmt.CommandText="select UserName from UserInfo where UserID=@UserID";
    stmt.MakeInParam("@UserID",UserID);
    DataRow dr = stmt.GetDataRow();
    if(dr!=null)
    {
     UserName = dr["UserName"].ToString() ;
    }
    else
    {
     return;
    }
    //更新Forum论坛用户的密码
    SqlConnection myConnection=new SqlConnection(ConfigurationSettings.AppSettings["BBSConnectionString"]);
    string passwordmd5=Common.CommonClass.MD5(passWord);
    string sqlstr="Update forums_Users Set PassWord='"+passwordmd5+"' Where UserName='"+this.UserName+"'";
    SqlCommand myCommand=new SqlCommand(sqlstr,myConnection);
    myCommand.CommandType=CommandType.Text;
    myConnection.Open();
    myCommand.ExecuteNonQuery();
    myConnection.Close();
   }
   catch
   {
   }
  }
  #endregion
用户登陆和退出的时候用的方法是url传参(可以通过一个隐藏的ifram实现页面不跳转),接口页面被动接收。下面贴出代码
说明:由于头儿说传url时密码简单md5加密很不安全,所以又经过变态加密了,加密方法是MD5(用户名+加密以后的用户密码)由于想走microsoft的存储过程所以我这连接数据库连了2次 

  private void Page_Load(object sender, System.EventArgs e)
  {
   if(!this.Page.IsPostBack)
   {
    if(Request.QueryString["u"]!=""&&Request.QueryString["u"]!=null)
    {
      this.username=Request.QueryString["u"].ToString();
     if(Request.QueryString["s"]!=""&&Request.QueryString["s"]!=null)
     {
      this.sysKey=Request.QueryString["s"].ToString();
      this.login(); 
     }
    }
    if(Request.QueryString["a"]!=""&&Request.QueryString["a"]!=null)
    {
     this.Logout();
    }
   }
  }

  public void login()
  {
    try
    {
    SqlConnection myConnection=new SqlConnection(ConfigurationSettings.AppSettings["SiteSqlServer"]);
    string sqlstr=@"Select * from forums_Users where UserName='"+username+"'";
    SqlDataAdapter myDA=new SqlDataAdapter(sqlstr,myConnection);
    myConnection.Open();
    myDA.Fill(this.myDS,"Users");
    if(myDS!=null)
    {
     password=myDS.Tables[0].Rows[0]["Password"].ToString();
    }
    if(sysKey.ToLower()!=MD5(username+password))
    {
     return;
    }
    myConnection.Close();

     User usertologin = new User();
     usertologin.Username = username;
     usertologin.Password = password;
    ForumsDataProvider dp = ForumsDataProvider.Instance();
    if(dp.ValidateUser(usertologin)>0)
    {
     FormsAuthentication.SetAuthCookie(usertologin.Username, true);
     ForumContext.Current.Context.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddDays(30);
    }
    }
    catch
    {
    
    }
  }

  #region 退出
  public void Logout()
  {
   FormsAuthentication.SignOut();
  }
  #endregion