小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

利用pdo實現(xiàn)不同web應(yīng)用的認(rèn)證統(tǒng)一

 johnlane 2007-06-28

pdo.net是我開發(fā)中的sso模塊的一部分,它是兼容pdo統(tǒng)一接口的.net實現(xiàn)

簡介
========================================
pdo規(guī)范由動易(powereasy),動網(wǎng)(dvbbs),oblog三方聯(lián)合制訂和維護(hù),其目的在于為不同的WEB應(yīng)用按照統(tǒng)一的規(guī)范開發(fā)用戶通行接口,以便實現(xiàn)不同WEB應(yīng)用之間的用戶數(shù)據(jù)同步。對該規(guī)范感興趣的人可以去http://www./Soft/documents/86.html下載


優(yōu)點
=========================================
每個整合的網(wǎng)站不需要修改自己的邏輯業(yè)務(wù)和數(shù)據(jù)結(jié)構(gòu)
用戶完全獨立存儲,不需要將用戶集中在用一的結(jié)構(gòu)中。
很適合兩個用戶庫結(jié)構(gòu)差異比較大的應(yīng)用整合
還有不同語言 不同數(shù)據(jù)庫的整合也是可以考慮的

原理
=========================================
不同的web應(yīng)用通過把用戶序列化為xml來傳遞用戶對象,利用ServerXmlHttp 進(jìn)行服務(wù)器和服務(wù)器之間的通訊來傳遞數(shù)據(jù)進(jìn)行通訊


using System;
using System.Text;
using System.Xml;

namespace Boxi.Web.SSO
{
    
/// <summary>
    
/// 用戶基本屬性實體類
    
/// </summary>

    public class User
    
{
        
#region 私有變量
        
private string _username;
        
private string _password;
        
private string _email;
        
private string _question;
        
private string _answer;
        
private string _savecookie;
        
private string _truename;
        
private string _gender;
        
private string _birthday;
        
private string _qq;
        
private string _msn;
        
private string _mobile;
        
private string _telephone;
        
private string _province;
        
private string _city;
        
private string _address;
        
private string _zipcode;
        
private string _homepage;
        
private string _userip;
        
private string _jointime;
        
private string _experience;
        
private string _ticket;
        
private string _valuation;
        
private string _balance;
        
private string _posts;
        
private string _userstatus;
        
private string _signature;
        
private string _occupation;
        
private string _interests;
        
#endregion


        
#region 封裝屬性

        
/// <summary>
        
/// 創(chuàng)建用戶
        
/// </summary>
        
/// <param name="username">用戶名</param>

        public User(string username)
        
{
            _username 
= username;
        }


        
/// <summary>
        
/// 用戶名
        
/// </summary>

        public string username
        
{
            
get return _username; }
            
set { _username = value; }
        }


        
/// <summary>
        
/// 用戶密碼
        
/// </summary>

        public string password
        
{
            
get return _password; }
            
set { _password = value; }
        }


        
/// <summary>
        
/// 電子郵件
        
/// </summary>

        public string email
        
{
            
get return _email; }
            
set { _email = value; }
        }


        
/// <summary>
        
/// 密碼提示問題
        
/// </summary>

        public string question
        
{
            
get return _question; }
            
set { _question = value; }
        }


        
/// <summary>
        
/// 密碼提示答案
        
/// </summary>

        public string answer
        
{
            
get return _answer; }
            
set { _answer = value; }
        }


        
/// <summary>
        
/// cookies保存時間;0=不記錄(默認(rèn)),1=一周,2=一月,3=一年
        
/// </summary>

        public string savecookie
        
{
            
get return _savecookie; }
            
set { _savecookie = value; }
        }


        
/// <summary>
        
/// 真實姓名
        
/// </summary>

        public string truename
        
{
            
get return _truename; }
            
set { _truename = value; }
        }


        
/// <summary>
        
/// 性別:0=女,1=男,2=保密
        
/// </summary>

        public string gender
        
{
            
get return _gender; }
            
set { _gender = value; }
        }


        
/// <summary>
        
/// 生日
        
/// </summary>

        public string birthday
        
{
            
get return _birthday; }
            
set { _birthday = value; }
        }


        
/// <summary>
        
/// QQ號
        
/// </summary>

        public string qq
        
{
            
get return _qq; }
            
set { _qq = value; }
        }


        
/// <summary>
        
/// MSN賬號
        
/// </summary>

        public string msn
        
{
            
get return _msn; }
            
set { _msn = value; }
        }


        
/// <summary>
        
/// 移動電話
        
/// </summary>

        public string mobile
        
{
            
get return _mobile; }
            
set { _mobile = value; }
        }


        
/// <summary>
        
/// 固定電話
        
/// </summary>

        public string telephone
        
{
            
get return _telephone; }
            
set { _telephone = value; }
        }


        
/// <summary>
        
/// 省/直轄市
        
/// </summary>

        public string province
        
{
            
get return _province; }
            
set { _province = value; }
        }


        
/// <summary>
        
/// 城市/區(qū)/縣
        
/// </summary>

        public string city
        
{
            
get return _city; }
            
set { _city = value; }
        }


        
/// <summary>
        
/// 通訊地址
        
/// </summary>

        public string address
        
{
            
get return _address; }
            
set { _address = value; }
        }


        
/// <summary>
        
/// 郵政編碼
        
/// </summary>

        public string zipcode
        
{
            
get return _zipcode; }
            
set { _zipcode = value; }
        }


        
/// <summary>
        
/// 個人主頁
        
/// </summary>

        public string homepage
        
{
            
get return _homepage; }
            
set { _homepage = value; }
        }


        
/// <summary>
        
/// 用戶IP地址
        
/// </summary>

        public string userip
        
{
            
get return _userip; }
            
set { _userip = value; }
        }


        
/// <summary>
        
/// 注冊日期
        
/// </summary>

        public string jointime
        
{
            
get return _jointime; }
            
set { _jointime = value; }
        }


        
/// <summary>
        
/// 經(jīng)驗值
        
/// </summary>

        public string experience
        
{
            
get return _experience; }
            
set { _experience = value; }
        }


        
/// <summary>
        
/// 可消費積分
        
/// </summary>

        public string ticket
        
{
            
get return _ticket; }
            
set { _ticket = value; }
        }


        
/// <summary>
        
/// 貢獻(xiàn)值
        
/// </summary>

        public string valuation
        
{
            
get return _valuation; }
            
set { _valuation = value; }
        }


        
/// <summary>
        
/// 現(xiàn)金余額
        
/// </summary>

        public string balance
        
{
            
get return _balance; }
            
set { _balance = value; }
        }


        
/// <summary>
        
/// 發(fā)表信息數(shù)
        
/// </summary>

        public string posts
        
{
            
get return _posts; }
            
set { _posts = value; }
        }


        
/// <summary>
        
/// 用戶狀態(tài):0=正常,1=鎖定,2=屏蔽,3=禁止,4=待驗證
        
/// </summary>

        public string userstatus
        
{
            
get return _userstatus; }
            
set { _userstatus = value; }
        }


        
/// <summary>
        
/// 簽名檔
        
/// </summary>

        public string signature
        
{
            
get return _signature; }
            
set { _signature = value; }
        }


        
/// <summary>
        
/// 職業(yè)
        
/// </summary>

        public string occupation
        
{
            
get return _occupation; }
            
set { _occupation = value; }
        }


        
/// <summary>
        
/// 興趣愛好
        
/// </summary>

        public string interests
        
{
            
get return _interests; }
            
set { _interests = value; }
        }


        
#endregion


        
/// <summary>
        
/// 獲取用戶擴(kuò)展屬性對應(yīng)的xml
        
/// </summary>
        
/// <returns></returns>

        public string ToXML()
        
{
            StringBuilder sb 
= new StringBuilder();

            
組裝xml

            
return sb.ToString();
        }

        
        
public void  LoadXML(XmlDocument xdoc)
        
{
            XmlNode xbody 
= xdoc.SelectSingleNode("/root/body[1]");
            
if (xbody!=null)
            
{
                LoadXml(xbody);
            }

            
else
            
{
                LoadXml(xdoc.SelectSingleNode(
"/root[1]"));
            }

        }

        
        
public void LoadXml(XmlNode xnod)
        
{
       
            
foreach (XmlNode o in xnod.ChildNodes)
            
{
                
switch(o.Name)
                
{
                    
case "username":
                        
{
                            _username 
= o.Value;
                        }

                        
break;
                    
case "password":
                        
{
                            _password 
= o.Value;
                        }

                        
break;
                    
case "email":
                        
{
                            _email 
= o.Value;
                        }

                        
break;
                    
case "question":
                        
{
                            _question 
= o.Value;
                        }

                        
break;
                    
case "answer":
                        
{
                            _answer 
= o.Value;
                        }

                        
break;
                    
case "gender":
                        
{
                            _gender 
= o.Value;
                        }

                        
break;
                    
case "truename":
                        
{
                            _truename 
= o.Value;
                        }

                        
break;
                    
case "birthday":
                        
{
                            _birthday 
= o.Value;
                        }

                        
break;
                    
case "qq":
                        
{
                            _qq 
= o.Value;
                        }

                        
break;
                    
case "msn":
                        
{
                            _msn 
= o.Value;
                        }

                        
break;
                    
case "mobile":
                        
{
                            _mobile 
= o.Value;
                        }

                        
break;
                    
case "telephone":
                        
{
                            _telephone 
= o.Value;
                        }

                        
break;
                    
case "province":
                        
{
                            _province 
= o.Value;
                        }

                        
break;
                    
case "address":
                        
{
                            _address 
= o.Value;
                        }

                        
break;
                    
case "zipcode":
                        
{
                            _zipcode 
= o.Value;
                        }

                        
break;
                    
case "homepage":
                        
{
                            _homepage 
= o.Value;
                        }

                        
break;
                    
case "userip":
                        
{
                            _userip 
= o.Value;
                        }

                        
break;
                    
case "jointime":
                        
{
                            _jointime 
= o.Value;
                        }

                        
break;
                    
case "experience":
                        
{
                            _experience 
= o.Value;
                        }

                        
break;
                    
case "ticket":
                        
{
                            _ticket 
= o.Value;
                        }

                        
break;
                    
case "valuation":
                        
{
                            _valuation 
= o.Value;
                        }

                        
break;
                    
case "balance":
                        
{
                            _balance 
= o.Value;
                        }

                        
break;
                    
case "posts":
                        
{
                            _posts 
= o.Value;
                        }

                        
break;
                    
case "userstatus":
                        
{
                            _userstatus 
= o.Value;
                        }

                        
break;
                    
case "signature":
                        
{
                            _signature 
= o.Value;
                        }

                        
break;
                    
case "occupation":
                        
{
                            _occupation 
= o.Value;
                        }

                        
break;
                    
case "interests":
                        
{
                            _interests 
= o.Value;
                        }

                        
break;
                }

            }

        }

    }

}



我們需要做什么?
=========================================
配置一些參數(shù):  配置通訊需要的令牌和需要同步的網(wǎng)站的信息
實現(xiàn)一個接口:  為了讓其它網(wǎng)站發(fā)送同步信息時更夠用自己的方法去修改自己的用戶數(shù)據(jù)
調(diào)用一些方法:  在注冊 登陸 注銷 更新時調(diào)用Ping方法 向其它需要同步的網(wǎng)站發(fā)送同步請求



      配置一些參數(shù)
--------------------------
1、增加一個配置節(jié)


<configSections>
    
<section name="PDO" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<PDO>
    
<!--令牌使用的關(guān)鍵字-->
    
<add key="key" value="Test"/>
    
<!--當(dāng)前應(yīng)用的名稱-->
    
<add key="appid" value="web1" />
    
<!--每次需要actionPing時需要同步的地址列表,用|分隔-->
    
<add key="ping" value="http://localhost/WebSite2/PDOPing.aspx"/>
    
<!--本站使用的action_Prvider-->
    
<add key="PDOAction_Provider" value="Boxi.Web.SSO.PDO.DefaultPDOAction,Boxi.Web.SSO.PDO"/>
  
</PDO>

2、添加httpHandler用來供其它網(wǎng)站Ping

<httpHandlers>
      
<add verb="*" path="PDOPing.aspx" type="Boxi.Web.SSO.HttpHandler.PDOPingHttpHandler,Boxi.Web.SSO"/>
</httpHandlers>

    實現(xiàn)一個接口
-----------------------
根據(jù)自己的邏輯業(yè)務(wù) 實現(xiàn)自己的方法


public interface IPDOAction
    {
        bool checkname(string name, string email);
        bool reguser(User user);
        bool login(User user);
        bool update(User user);
        bool delete(User user);
        User getinfo();
    }


    調(diào)用一些方法
----------------------
1、在自己的頁面的登陸和注銷中額外發(fā)起一個客戶端http請求
//這部分正在尋找更好的解決方法
//這是為了保證每個站點均操作cookies

2、在注冊、更新、刪除、獲取用戶資料時使用ping中提供的方法
reguser(User user); 注冊用戶
update(User user); 更新用戶
delete(User user);刪除用戶
User getinfo();//獲取用戶信息


protected void Button1_Click(object sender, EventArgs e)
    
{
        
string username = TextBox1.Text;
        
string password = TextBox2.Text;
        
//先實現(xiàn)自己的用戶注冊
        .
        
        
//然后再通過ping向其它網(wǎng)站注冊
        Boxi.Web.SSO.User _user = new User(TextBox1.Text);
        _user.password 
= TextBox2.Text;
        PDOPing _ping
=new PDOPing();
        
string[] result = _ping.reguser(_user);
        
for (int i = 0; i < result.Length;i++ )
        
{
            
//將所有站點注冊的結(jié)果寫到頁面
            Response.Write(result[i]);
            Response.Write(
"<br/>");
        }

    }

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約