Heim > Artikel > Backend-Entwicklung > Detaillierte Einführung und Beispiele für die PHP-Programmierung SSO
In diesem Artikel werden hauptsächlich die detaillierte Einführung in die PHP-Programmierung von SSO und die relevanten Informationen anhand einfacher Beispiele vorgestellt. Hier werden die drei Modi der domänenübergreifenden Einzelanmeldung, der vollständigen einzelpunktübergreifenden Domänenanmeldung und der Stationsgruppe vorgestellt Gemeinsame Identitätsauthentifizierung. Freunde in Not Sie können sich auf Folgendes beziehen:
Detaillierte Erklärung von PHP SSO
SSO hat drei Modi: ① Cross- Subdomain-Einzelpunkt-Anmeldung ② Vollständige punktübergreifende Domänen-Anmeldung ③ Gemeinsame Identitätsauthentifizierung der Stationsgruppe
Der erste Modus ist sehr einfach, Sie müssen nur die Cookie-Domäne auf das Stammverzeichnis setzen Domäne mehrerer Anwendungen
Die zweite Methode ist ebenfalls sehr einfach. Sie besteht darin, die Authentifizierungsadresse aller Anwendungen in dieselbe Authentifizierungsadresse zu ändern und jedes Mal zu überprüfen, ob Sie sich beim Zertifizierungszentrum anmelden. Wenn Sie sich anmelden, stellen Sie der aufrufenden Anwendung ein Verschlüsselungstoken aus
Die dritte Art der domänenübergreifenden Nutzung besteht darin, dass es etwas mühsam ist, hin und her zu springen, um das Token zu überprüfen
Konfigurieren Sie die Verzeichnisstruktur
Erstellen Sie im Stammverzeichnis des Servers drei neue Projektverzeichnisse:
|–/Website-Stammverzeichnis/
|–|– /oa/
|–|–/bbs/
|–|–/blog/
Erstellen Sie eine neue Skriptdatei „functions.PHP“ im Stammverzeichnis. Der spezifische Inhalt lautet wie folgt:
<?php /** * 获取登陆token * @param string $url 获取token的地址 * 2017-01-03T13:08:43+0800 */ function getToken($url) { $bool = isLogin(); if ($bool) { // 如果登陆了跳转到本站首页 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) { // 设置跳转过来的网站的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; } } ?>
Erstellen Sie im oa-Projektverzeichnis eine neue index.php und login.php. Zwei Skriptdateien
Bearbeiten Sie die Datei 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站点"; ?>
Bearbeiten Sie die Datei login.php
<?php // OA站点登陆系统 require '../functions.php'; // (2)验证 yzToken('taoip.cn'); // (1)判断是否登陆,登陆则跳转首页,未登录则去其他站点获取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站点登陆系统</title> </head> <body> <p class="container"> <h2>oa.taoip.cn站点登陆系统</h2> <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> </p> </body> </html>
Erstellen Sie im BBS-Projektverzeichnis zwei Skriptdateien, index.php und login.php
Bearbeiten Sie die Datei 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站点"; ?>
Bearbeiten Sie die Datei 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站点登陆系统 require '../functions.php'; // (2)验证 yzToken('taoip.cn'); // (1)判断是否登陆,登陆则跳转首页,未登录则去其他站点获取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站点登陆系统</title> </head> <body> <p class="container"> <h2>bbs.taoip.cn站点登陆系统</h2> <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> </p> </body> </html>
Erstellen Sie im Blog-Projektverzeichnis zwei neue Skriptdateien, index.php und login.php
Bearbeiten Sie die Datei 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-Datei bearbeiten
<?php /** * @author DengPeng <3@dengpeng.cc> * @since 2017/01/03 * @copyright copyright (c) 2017 zixue.it GPL * @license http://www.zixue.it/ */ // blog站点登陆系统 require '../functions.php'; // (2)验证 yzToken('dengpeng.cc'); // (1)判断是否登陆,登陆则跳转首页,未登录则去其他站点获取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)判断用户是否提交数据 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站点登陆系统</title> </head> <body> <p class="container"> <h2>dengpeng.cc站点登陆系统</h2> <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> </p> </body> </html>
Lokalen virtuellen Host konfigurieren
Ich denke, jeder sollte die spezifischen Konfigurationsschritte kennen, daher muss ich nicht einzeln auf Details eingehen. Sie müssen nur der von mir angegebenen Referenz folgen und die Konfiguration entsprechend den verschiedenen Domänennamen konfigurieren . Verzeichniszuordnung ist ausreichend 🎜 >
Herzlichen Glückwunsch, Sie haben ein einfaches SSO-System fertiggestellt
Denken Sie nach Abschluss der Konfiguration daran, den Webserver neu zu starten. Anschließend müssen Sie nur noch auf diese drei verschiedenen Sites zugreifen, um eine Site zu implementieren Melden Sie sich an, andere Websites senden keine Anmeldeanfragen mehr.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er zum Lernen aller beiträgt.
PHP Single Sign-On SSO-Implementierungsmethode
Beispiel Erklären Sie das Prinzip des SSO Single Sign-On
php verwendet zwei benutzerdefinierte Schlüsselnamen-Vergleichsfunktionen array_udiff_uassoc()
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung und Beispiele für die PHP-Programmierung SSO. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!