ホームページ >バックエンド開発 >PHPチュートリアル >PHP でのシングル サインオンのセッション制御

PHP でのシングル サインオンのセッション制御

不言
不言オリジナル
2018-07-10 16:56:021289ブラウズ

この記事では主に PHP のシングル サインオンのセッション制御について紹介します。これには一定の参考値があります。今、共有します。必要な友人は参考にしてください。

1. 単純にセッションを使用します
セッションを使用する前に、session_start() でセッションを開く必要があります。
実装するデモを作成します。

新しいセッションを作成します。php

<?php
    session_start();	//使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了
    $_SESSION[&#39;username&#39;] = &#39;admin&#39;;	//存储session信息为键为username值为admin的一对数据
?>

新しい getsession を作成します。 .php を実行してみましょう 値を取得します

<?php
	session_start();	//使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了
	echo $_SESSION[&#39;username&#39;];	//取出在session里存的username的值
?>

セッション ID が異なるため、ブラウザごとに取得される値は異なります。例:
I use Google ブラウザを使用して session.php にアクセスしますセッションが作成された場合、同じブラウザを使用して getsession.php にアクセスすると、値が取得できます。Firefox ブラウザを使用して session.php に再度アクセスすると、セッションが再生成され、値を取得できます。再度 getsession.php にアクセスして値を取得しますが、2 つのブラウザのセッション ID が異なるため、値が同じではないことがわかります。Firefox の sessionID を取得し、Google の sessionID を変更すると、次のことがわかります。セッション値は sessionID のみを認識するため、それらは 2 つあり、値は同じです。

子供用の靴は、このように見えるかどうかを操作してみることができます。

2. クロスドメイン
独自の Apache/nginx サーバー上に独自の仮想ホストを構成する場合。
私のサーバーは Apache サーバーであり、nginx は構成ファイル ----vhost.conf も変更します。

<VirtualHost *:80>
    DocumentRoot "H:\myphp_www\PHPTutorial\WWW\sessoin"
    ServerName www.test.com
    ServerAlias 
  <Directory "H:\myphp_www\PHPTutorial\WWW\sessoin">
      Options FollowSymLinks ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
     Require all granted
  </Directory>
</VirtualHost>

www.test.com という仮想ドメイン名を持つ仮想ホストがセットアップされました。忘れずに Apache/nginx を再起動してください。再起動しないと、設定が有効になりません。

ここでしなければならないことは、2 つのドメイン名 (たとえば、www.test.com と localhost が 1 つのサーバーにある場合) のセッション ID を一貫性を保つことです。
実装するためのデモを書いてみましょう (セキュリティとパフォーマンスを最初に考慮しません)

user.php を作成するには、現在のローカルホストのセッション ID を www.test.com に渡す必要があります。

<?php
	session_start();	//一定要先开启session
	$sid = session_id();		//获取到当前的sessionID
?>
<a href="http://www.test.com/getsession.php?sid= <?php echo $sid;?> ">跳转</a>

ページに直接ジャンプするとエラーが発生します。送信しただけで gotsession.php が受信していないためです。そのため、getsession.php ファイルを変更する必要があります

<?php
	if (isset($_GET[&#39;sid&#39;])){
		//setcookie(&#39;名字&#39;,&#39;值&#39;,&#39;有效期&#39;,&#39;域名&#39;);
		$sid = $_GET[&#39;sid&#39;];
		//setcookie(&#39;PHPSESSID&#39; , $sid);	//设置sessionID
		//或者我们还可以用另一种方式
		session_id($sid);	//开启session之前 指定一个sessionid
	}
	session_start();
	echo $_SESSION[&#39;username&#39;];
?>

セッション ID に応じて変更できるようにする 一貫性により、2 つのドメイン名間のクロスドメインの問題が解決されます

3. シングル サインオンを実装します---つまり、localhost でログインした後、 www.test.com で同時にログインできます---- -クロスドメイン リクエスト
クロスドメイン リクエストは、ajax を使用して実装することはできません。クロスドメインには Jsonp を使用する必要があります
にローカル ファイルを作成します2 つのドメインをより明確に区別するために、セッション フォルダーの同じディレクトリを作成します
私たちが今達成したいのは、localhost と www.test.com が相互に通信できるようにすることです -----前提条件は、それがserver

セッション配下に api.php を作成

<?php
	
?>

ローカル配下にindex.htmlを作成

<script src="www.test.com/api.php"></script>  <!-- JS代码在浏览器端执行 -->

ローカル配下のindex.htmlにアクセスする場合、内部の JS コードが www.test.com/api .php

セッション内の getsession.php ファイルを次の内容に変更するため、2 つのリクエストが開始されます:

<?php
	session_start();
	if(isset($_SESSION[&#39;uid&#39;])){
		echo "用户已登录,id是".$_SESSION[&#39;uid&#39;];
	} else {
		echo "没有登录";	
	}
?>

Copyセッション下のgetsession.phpのコピーをローカルにコピーします

ローカルでlogin.phpファイルを作成します

<?php
	session_start();
	$_SESSION[&#39;uid&#39;] = 18;	//存储session数据键为uid值为18的一对数据
?>

login.phpにアクセスし、現在のディレクトリにあるgetsession.phpファイルにアクセスすると、結果は次のようになります。ユーザーはログインしており、ID は 18 です。

次に、私たちがしなければならないことは、ログインするために localhost の下で login.php にアクセスするときに、静かに www.test.com にログインさせることです。

localhost にあるlogin.php ファイルを次のコードに変更します。

<?php
	session_start();
	$_SESSION[&#39;uid&#39;] = 18;	//存储session数据键为uid值为18的一对数据
	$uid = $_SESSION[&#39;uid&#39;];
?>
<script src="www.test.com/api.php?uid=<?php echo $uid;?>" ></script>

localhost/local/login.php にアクセスして同期ログインし、localhost/local/getsession にアクセスします。 php がすでにログインしている必要があります

ここで、www.test.com/getsession に直接アクセスしてください。セッションを受信して​​いないため、.php ファイルは何も変更されません。そのため、api.php ファイルを変更する必要があります。セッションの下で次のコードを実行します:

<?php
	session_start();
	$uid = $_GET[&#39;uid&#39;];
	
	$_SESSION[&#39;uid&#39;] = $uid;
?>

この場合、www.test.com/getsession にアクセスしてください。php を使用する場合、ログインしていることも確認されます。
このように、 Jsonp を使用してクロスドメイン リクエストを実装します。ある Web サイトにログインするとき、別の Web サイトは同時にログインできます。

上記は記事の内容全体であり、皆様の学習に役立つことを願っています。内容については、PHP 中国語 Web サイトにご注意ください。

関連する推奨事項:

PHP の情報暗号化テクノロジの概要

PHP が後に残る問題を解決する方法foreach ループの配列参照問題

#vue mui の mui-silder プラグインが無効でドラッグできない問題の解決方法 ##

以上がPHP でのシングル サインオンのセッション制御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。