ホームページ >バックエンド開発 >PHPチュートリアル >PHP が Web システムにシングル サインオンを実装する_PHP チュートリアル
ユーザーのニーズは拡大し続けるため、より多くのシステムが構築されています。より良いユーザー エクスペリエンスを得るには、ユーザー シングル サインオンを実装する必要があります。いわゆるシングル サインオンとは、ユーザーが 1 つのシステムにログインした後は、他のシステムに繰り返しログインする必要がないことを意味します。シングル サインインの利点は明らかで、ユーザー エクスペリエンスが向上します。シングル サインオンを実装する方法。ここでは 2 つのソリューションを提供します:
1. 第一レベルのドメイン名は同じであり、Cookie を共有することで実現されます
a.the.com と b.the.com A と B の 2 つのサイトがあり、A か B のどちらかのサイトにログインしていれば、もう一方のサイトにログインすることなく、両方のサイトを利用できます。 Cookie ベースの実装では、2 つのシステムが第 1 レベルのドメイン名を共有し、ユーザーが一意に識別されることが前提となります。上記 2 つのサイトの第 1 レベルのドメイン名は the.com です。具体的なプロセスは次のとおりです。ユーザーがいずれかのサイトにログインすると、Cookie のドメイン属性が the.com に設定されます。 Cookie 情報が設定されます。セキュリティのために、Cookie の値は暗号化される必要があります。ユーザーが他の Web サイトにアクセスすると、まず Cookie が存在するかどうかが判断され、存在する場合は Cookie が復号化され、ユーザー情報が取得され、ユーザーはログイン状態になります。
以下はPHPのサンプルコードです
関数login() //通常ログイン
{
......//ユーザーの正当性を検証します
$_SESSION['uid'] = $user_id;
Setcookie('sign', encrypt($pass9), '', '/', 'the.com');
}
関数記号()
{
$sign = $_COOKIE['sign'];
if(!empty($sign))
{
$sign = decrypt($sign);
…………///ログイン成功
}
}
ここで注意する必要があるのは、暗号化と復号にはセキュリティ検証が必要であるということです。ただし、この方法は完全ではありません。また、この完全に Cookie ベースの方法は安全性が不十分です。
2. 特別なログインシステムを使用します。
すべてのサイトはログイン システムを共有します。ユーザーがいずれかのサイトでログインに成功すると、システムは他のサイトのログイン インターフェースを呼び出して、他のサイトでのユーザーのログインを完了し、対応するログイン情報を設定します。 , このシステムにはユーザーのログイン情報のみが保存されます。ユーザーが他のサイトにログインする場合は、ユーザーがログインしているかどうかの情報を取得するためにシステム インターフェイスを要求する必要があります。前者の方法の欠点は、ユーザーが他のサイトを使用しているかどうかに関係なく、それらのサイトがユーザーのステータスを保存する必要があることです。後者の方法では、すべての圧力がログイン システムに転送されます。ユーザー出口の統一された操作を実現したい場合は、サイトがログイン システムの出口インターフェースを呼び出し、ログイン システム インターフェースが他のサイトの出口インターフェースを呼び出すか、ユーザーに出口を示すマークを設定する必要があります。マークが存在しない場合は、この時点でマークを消去してください。マークが存在しないことが他のサイトに検出された場合、ユーザーがシステムを終了したことがわかります。
この処理方法では、ログインシステムと個別サイトとの間のログインインターフェースとログアウトインターフェースを規定する必要があります。これらのインターフェースを通じて、Web サイトはユーザーのログインまたはログアウトを簡単に処理できます:
関数login()
{
$info = callLoginServer() //ログインサーバーにアクセスします
if(!empty($info)) //ログイン成功
}
//ユーザーがログインしていない場合は、このシステムにログインし、ログインサーバーインターフェースを呼び出します
function login() //このシステムにログインします
{
…//ログイン成功
callSeverLogin();//ユーザーにログインするように通知します
}
上記は単なる論理構造であり、正式なシステムでは具体的な処理が必要となります。
もっと良い方法があれば、ぜひ一緒に話し合ってください!
http://www.bkjia.com/PHPjc/847201.html