溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP編程中SSO的介紹以及作用

發(fā)布時間:2021-06-29 11:06:00 來源:億速云 閱讀:110 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要介紹“PHP編程中SSO的介紹以及作用”,在日常操作中,相信很多人在PHP編程中SSO的介紹以及作用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP編程中SSO的介紹以及作用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

PHP SSO詳解

SSO有三種模式:①跨子域單點登陸②完全跨單點域登陸③站群共享身份認證

第一種模式很簡單,只需要將Cookie的域設置成多個應用的根域即可

第二種方式,也很簡單,就是將所以應用的認證地址更換成同一個認證地址,每次查看是否在認證中心登陸,如果登陸了,給調(diào)用應用發(fā)放一個加密令牌即可

第三種跨域,就是來回跳轉(zhuǎn)來回驗證token略有麻煩

配置目錄結(jié)構(gòu)

服務器根目錄下,新建三個項目目錄:

|–/網(wǎng)站根目錄/
|–|–/oa/
|–|–/bbs/
|–|–/blog/

在根目錄下新建functions.PHP腳本文件,具體內(nèi)容如下:

<?php

/**
 * 獲取登陸token
 * @param string $url 獲取token的地址
 * 2017-01-03T13:08:43+0800
 */
function getToken($url)
{
  $bool = isLogin();
  if ($bool) {
    // 如果登陸了跳轉(zhuǎn)到本站首頁
    header('location: index.php');
    exit();
  }

  // 否則沒有登陸,去另一個站點看是否登陸
  header('location: '.$url);
}

// 校驗令牌是否正確
function yzToken($domain)
{
  $url = isset($_GET['url']) ? $_GET['url'] : '';
  $username = isset($_GET['username']) ? $_GET['username'] : '';
  $token = isset($_GET['token']) ? $_GET['token'] : '';


  if (!empty($username) && !empty($token)) {
    $salt = 'taoip';
    $_token = md5($salt.$username);
    // 校驗第三方站點過來時的token是否正確
    if ($_token == $token) {
      // 設置跳轉(zhuǎn)過來的網(wǎng)站的Cookie
      setCook($username, $_token, $domain);
      header('location: index.php');
    }
  }

}

// 設置cookie
function setCook($username, $_password, $domain)
{
  // 校驗成功,開始登陸
  setcookie('username', $username, time()+3600, '/', $domain);
  setcookie('token', $_password, time()+3600, '/', $domain);
  header('location: index.php');
}

// 判斷是否登陸
function isLogin()
{
  $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
  $token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';
  $salt = 'taoip';

  $_token = md5($salt.$username);

  if ($token == $_token) {
    return true;
  } else {
    return false;
  }
}

?>

在oa項目目錄下,新建index.php和login.php兩個腳本文件

編輯index.php文件

<?php

// OA站點

// (1)開啟Session會話
session_name('taoip');
session_start();
// (2)獲取用戶名和token進行校驗
$username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
$token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';

$salt = 'taoip';

$_token = md5($salt.$username);

if ($token != $_token) {
  header('location: login.php');
  exit();
}

echo "歡迎{$username}用戶,訪問OA站點";

?>

編輯login.php文件

<?php

// OA站點登陸系統(tǒng)
require '../functions.php';

// (2)驗證
yzToken('taoip.cn');

// (1)判斷是否登陸,登陸則跳轉(zhuǎn)首頁,未登錄則去其他站點獲取token
$url = isset($_GET['url']) ? $_GET['url'] : '';
if (empty($url)) {
  getToken('http://dengpeng.cc/login.php?url=http://oa.taoip.cn/login.php');
}

// (1)判斷用戶是否登陸
$bool = isLogin();
$url = isset($_GET['url']) ? $_GET['url'] : '';
if ($bool) {
  if (empty($url)) {
    header('location: index.php');
  } else {
    $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
    $token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';
    $lurl = $url.'?username='.$username.'&token='.$token;
    header('location: '.$lurl);
  }
}


if (!empty($_POST)) {
  $username = isset($_POST['username']) ? $_POST['username'] : '';
  $password = isset($_POST['password']) ? $_POST['password'] : '';

  // 從庫中查詢用戶密碼
  @$link = mysql_connect('localhost', 'root', '');
  mysql_query('use sso', $link);
  mysql_query('set names utf8', $link);
  $sql = "select * from users where username = '".$username."'";
  $user = mysql_fetch_assoc(mysql_query($sql, $link));

  // 校驗
  $salt = 'taoip';
  $_password = md5($salt.$username);

  // var_dump($user['password'] == $_password);
  // print_r($user);exit();

  if ($user['password'] == $_password) {
    // 校驗成功,開始登陸
    setcookie('username', $username, time()+3600, '/', 'taoip.cn');
    setcookie('token', $_password, time()+3600, '/', 'taoip.cn');
    // 如果URL沒有值重定向到首頁,否則重定向到URL頁面
    if (empty($url)) {
      header('location: index.php');
    } else {
      header('location: '.$lurl);
    }
  }
}

?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="generator" content="Sublime Text 3114">
  <meta name="author" content="3@dengpeng.cc">
  <meta name="keywords" content="">
  <meta name="description" content="">
  <title>OA站點登陸系統(tǒng)</title>
</head>
<body>
  <div class="container">
    <h3>oa.taoip.cn站點登陸系統(tǒng)</h3>
    <form action="" method="post">
      <label for="">用戶名</label>
      <input type="text" name="username">
      <br>
      <label for="">密碼</label>
      <input type="text" name="password">
      <hr>
      <button type="submit">提交</button>
    </form>
  </div>
</body>
</html>

在bbs項目目錄下,新建index.php和login.php兩個腳本文件

編輯index.php文件

<?php
/**
 * @author DengPeng <3@dengpeng.cc>
 * @since 2017/01/03
 * @copyright copyright (c) 2017 zixue.it GPL
 * @license http://www.zixue.it/
 */

// BBS站點

// (1)開啟Session會話
session_name('taoip');
session_start();
// (2)獲取用戶名和token進行校驗
$username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
$token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';

$salt = 'taoip';

$_token = md5($salt.$username);

if ($token != $_token) {
  header('location: login.php');
  exit();
}

echo "歡迎{$username}用戶,訪問BBS站點";

?>

編輯login.php文件

<?php
/**
 * @author DengPeng <3@dengpeng.cc>
 * @since 2017/01/03
 * @copyright copyright (c) 2017 zixue.it GPL
 * @license http://www.zixue.it/
 */

// BBS站點登陸系統(tǒng)
require '../functions.php';

// (2)驗證
yzToken('taoip.cn');

// (1)判斷是否登陸,登陸則跳轉(zhuǎn)首頁,未登錄則去其他站點獲取token
$url = isset($_GET['url']) ? $_GET['url'] : '';
if (empty($url)) {
  getToken('http://dengpeng.cc/login.php?url=http://bbs.taoip.cn/login.php');
}

// (1)判斷用戶是否登陸
$bool = isLogin();
$url = isset($_GET['url']) ? $_GET['url'] : '';
if ($bool) {
  if (empty($url)) {
    header('location: index.php');
  } else {
    $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
    $token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';
    $lurl = $url.'?username='.$username.'&token='.$token;
    header('location: '.$lurl);
  }
}


if (!empty($_POST)) {
  $username = isset($_POST['username']) ? $_POST['username'] : '';
  $password = isset($_POST['password']) ? $_POST['password'] : '';

  // 從庫中查詢用戶密碼
  @$link = mysql_connect('localhost', 'root', '');
  mysql_query('use sso', $link);
  mysql_query('set names utf8', $link);
  $sql = "select * from users where username = '".$username."'";
  $user = mysql_fetch_assoc(mysql_query($sql, $link));

  // 校驗
  $salt = 'taoip';
  $_password = md5($salt.$username);

  // var_dump($user['password'] == $_password);
  // print_r($user);exit();

  if ($user['password'] == $_password) {
    // 校驗成功,開始登陸
    setcookie('username', $username, time()+3600, '/', 'taoip.cn');
    setcookie('token', $_password, time()+3600, '/', 'taoip.cn');
    // 如果URL沒有值重定向到首頁,否則重定向到URL頁面
    if (empty($url)) {
      header('location: index.php');
    } else {
      header('location: '.$lurl);
    }
  }
}

?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="generator" content="Sublime Text 3114">
  <meta name="author" content="3@dengpeng.cc">
  <meta name="keywords" content="">
  <meta name="description" content="">
  <title>BBS站點登陸系統(tǒng)</title>
</head>
<body>
  <div class="container">
    <h3>bbs.taoip.cn站點登陸系統(tǒng)</h3>
    <form action="" method="post">
      <label for="">用戶名</label>
      <input type="text" name="username">
      <br>
      <label for="">密碼</label>
      <input type="text" name="password">
      <hr>
      <button type="submit">提交</button>
    </form>
  </div>
</body>
</html>

在blog項目目錄下,新建index.php和login.php兩個腳本文件

編輯index.php文件

<?php
/**
 * @author DengPeng <3@dengpeng.cc>
 * @since 2017/01/03
 * @copyright copyright (c) 2017 zixue.it GPL
 * @license http://www.zixue.it/
 */

// blog站點

// (1)開啟Session會話
session_name('taoip');
session_start();
// (2)獲取用戶名和token進行校驗
$username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
$token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';

$salt = 'taoip';

$_token = md5($salt.$username);

if ($token != $_token) {
  header('location: login.php');
  exit();
}

echo "歡迎{$username}用戶,訪問blog站點";

?>

<?php
/**
 * @author DengPeng <3@dengpeng.cc>
 * @since 2017/01/03
 * @copyright copyright (c) 2017 zixue.it GPL
 * @license http://www.zixue.it/
 */

// blog站點

// (1)開啟Session會話
session_name('taoip');
session_start();
// (2)獲取用戶名和token進行校驗
$username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
$token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';

$salt = 'taoip';

$_token = md5($salt.$username);

if ($token != $_token) {
  header('location: login.php');
  exit();
}

echo "歡迎{$username}用戶,訪問blog站點";

?>

編輯login.php文件

<?php
/**
 * @author DengPeng <3@dengpeng.cc>
 * @since 2017/01/03
 * @copyright copyright (c) 2017 zixue.it GPL
 * @license http://www.zixue.it/
 */

// blog站點登陸系統(tǒng)
require '../functions.php';

// (2)驗證
yzToken('dengpeng.cc');

// (1)判斷是否登陸,登陸則跳轉(zhuǎn)首頁,未登錄則去其他站點獲取token
$url = isset($_GET['url']) ? $_GET['url'] : '';
if (empty($url)) {
  getToken('http://oa.taoip.cn/login.php?url=http://dengpeng.cc/login.php');
}


// (1)判斷用戶是否登陸
$bool = isLogin();
$url = isset($_GET['url']) ? $_GET['url'] : '';
if ($bool) {
  if (empty($url)) {
    header('location: index.php');
  } else {
    $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
    $token = isset($_COOKIE['token']) ? $_COOKIE['token'] : '';
    $lurl = $url.'?username='.$username.'&token='.$token;
    header('location: '.$lurl);
  }
}


// (3)判斷用戶是否提交數(shù)據(jù)
if (!empty($_POST)) {
  $username = isset($_POST['username']) ? $_POST['username'] : '';
  $password = isset($_POST['password']) ? $_POST['password'] : '';

  // 從庫中查詢用戶密碼
  @$link = mysql_connect('localhost', 'root', '');
  mysql_query('use sso', $link);
  mysql_query('set names utf8', $link);
  $sql = "select * from users where username = '".$username."'";
  $user = mysql_fetch_assoc(mysql_query($sql, $link));

  // 校驗
  $salt = 'taoip';
  $_password = md5($salt.$username);

  // var_dump($user['password'] == $_password);
  // print_r($user);exit();

  if ($user['password'] == $_password) {
    setCook($username, $_password, 'dengpeng.cc');
    if (empty($url)) {
      header('location: index.php');
    } else {
      header('location: '.$lurl);
    }
  }
}

?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="generator" content="Sublime Text 3114">
  <meta name="author" content="3@dengpeng.cc">
  <meta name="keywords" content="">
  <meta name="description" content="">
  <title>blog站點登陸系統(tǒng)</title>
</head>
<body>
  <div class="container">
    <h3>dengpeng.cc站點登陸系統(tǒng)</h3>
    <form action="" method="post">
      <label for="">用戶名</label>
      <input type="text" name="username">
      <br>
      <label for="">密碼</label>
      <input type="text" name="password">
      <hr>
      <button type="submit">提交</button>
    </form>
  </div>
</body>
</html>

配置本地虛擬主機

具體配置步驟,我想大家應該都會了,不需要我一一贅述.你只需要按照我給的參照,配置和不同域名對應目錄的映射即可.

域名 /項目目錄/
oa.taoip.cn /oa/
bbs.taoip.cn /bbs/
dengpeng.cc /blog/

恭喜您,已經(jīng)完成了一個簡單的SSO系統(tǒng)

配置完成后,記得重啟Web服務器.然后你只需要訪問這三個不同的站點,即可實現(xiàn)一個站點登陸,其他站點不再發(fā)送登陸請求.

到此,關(guān)于“PHP編程中SSO的介紹以及作用”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI