程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php實現web系統單點登錄

php實現web系統單點登錄

編輯:關於PHP編程

       隨著用戶不斷擴大的需求,更多的系統被建造起來。為了獲得更好的用戶體驗,需要實現用戶單點登錄。所謂單點登錄,就是用戶在一個系統上登錄後,其他系統就不需要重復登錄。單點的登錄的好處很明顯,提高了用戶體驗度。如何實現單點登錄,在這裡我提供兩種解決方案:

      1.一級域名相同,通過共享cookie來實現

      有a.the.com和b.the.com A B兩個站點, 只要在A,B任何一個站點登錄後,兩個網站就都可以使用,不需要在另一個站點登錄了。而通過基於cookie的實現方式,前提是兩個系統共享一級域名,並且用戶要可以唯一標示。上面這兩個站點的一級域名是the.com,我們只需要將Cookie的domain屬性設置為the.com;具體處理過程如下:當用戶在其中某一個站點登錄,就設置一個cookie信息,該cookie包含標識用戶ID,為了安全,還需要利用對該cookie的值加密。當用戶訪問其他網站的時候,首先判斷是否存在cookie,如果有的話,便解密該cookie,獲取用戶信息,設置用戶為登錄狀態。

      下面是PHP示例代碼

      function login() //正常的登錄

      {

      .......//驗證用戶的合法性

      $_SESSION['uid'] = $user_id;

      setcookie('sign', encrypt($pass9), '', '/', 'the.com');

      }

      funtion sign()

      {

      $sign = $_COOKIE['sign'];

      if(!empty($sign))

      {

      $sign = decrypt($sign);

      ..........///登錄成功

      }

      }

      這裡需要注意的是:加解密一定需要做安全驗證。但是這個方法也不夠完美,兩個站點必須有相同一級域名;另外這種完全基於cookie的方式,安全性不夠高。

      2.采用專門登錄系統。

      所有的站點共享一個登錄系統;當用戶在其中的一個站點登錄成功時, 該系統調用其他站點的登錄接口,完成用戶在其他站點的登錄,同時設置相應的登錄信息;或者在用戶登錄時,只在該系統保存用戶登錄信息,當用戶在其他站點登錄時,必須請求該系統接口,獲取用戶是否登錄的信息。前一種方式的缺點是:不管用戶有沒有使用其他站點,那些站點都需要保存用戶狀態;後一種方式就把所有的壓力都轉移到登錄系統上面來。而如果要實現用戶退出的統一操作,就需要站點調用登錄系統的退出接口,然後登錄系統接口調用其他站點的退出接口;或者設置一個標記,如果這個標記不存在則標示用戶退出,此時只要把該標示清空即可,其他站點發現該標示不存在就知道用戶已經退出系統。

      這種處理方式需要在登錄系統和個站點之間規定登錄接口,和注銷接口。通過這些接口,個站點可以很方便的處理用戶登錄或退出:

      function login()

      {

      $info = callLoginServer(); //訪問登錄服務器

      if(!empty($info)) //登錄成功了

      }

      //用戶沒有登錄,則在本系統中登錄並調用登錄服務器接口

      function loging() //本系統登錄

      {

      .....//登錄成功

      callSeverLogin();//通知用戶登錄

      }

      上面只是簡單的邏輯結構,對於正式的系統需要做具體的處理。

      如果大家還有更好的方法,歡迎一起討論!

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved