好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php sso单点登录实现代码 - php高级应用

php sso单点登录实现代码

下面详细讲到了几点.1、点击登录跳转到SSO登录页面并带上当前应用的callback地址 2、登录成功后生成COOKIE并将COOKIE传给callback地址 3、callback地址接收SSO的COOKIE并设置在当前域下再跳回到应用1即完成登录 4、再在应用程序需要登录的地方嵌入一个iframe用来实时检测登录状态,代码如下:

<?php   //index.php 应用程序页面    header( 'Content-Type:text/html; charset=utf-8' );   $sso_address  =  'http://2spaoku测试数据/sso/login.php' ; //你SSO所在的域名   $callback_address  =  'http://' . $_SERVER [ 'HTTP_HOST' ]                       . str_replace ( 'index.php' , '' , $_SERVER [ 'SCRIPT_NAME' ])                       . 'callback.php' ;  //callback地址用于回调设置cookie     if (isset( $_COOKIE [ 'sign' ])){        exit ( "欢迎您{$_COOKIE['sign']} <a href=" login.php?logout ">退出</a>" );   } else {        echo   '您还未登录 <a href="' . $sso_address . '?callback=' . $callback_address . '">点此登录</a>' ;   }   ?>  <iframe src= "<?php echo $sso_address ?>?callback=<?php echo $callback_address ?>"  frameborder= "0"   width= "0"  height= "0" ></iframe>    <?php   //login.php SSO登录页面    header( 'Content-Type:text/html; charset=utf-8' );   if (isset( $_GET [ 'logout' ])){       setcookie( 'sign' , '' ,-300);       unset( $_GET [ 'logout' ]);       header( 'location:index.php' );   }    if (isset( $_POST [ 'username' ]) && isset( $_POST [ 'password' ])){       setcookie( 'sign' , $_POST [ 'username' ],0, '' );       header( "location:" . $_POST [ 'callback' ]. "?sign={$_POST['username']}" );   }    if ( empty empty ( $_COOKIE [ 'sign' ])){   ?>    <form method= "post" >   <p>用户名:<input type= "text"  name= "username"  /></p>   <p>密  码:<input type= "password"  name= "password"  /></p>   <input type= "hidden"  name= "callback"  value= "<?php echo $_GET['callback']; ?>"  />   <input type= "submit"  value= "登录"  />   </form>      <?php   } else {        $query  = http_build_query( $_COOKIE );        echo   "系统检测到您已登录 {$_COOKIE['sign']} <a href=" { $_GET [ 'callback' ]}?{ $query } ">授权</a> <a href=" ?logout ">退出</a>" ;   }   ?>    <?php   //callback.php 回调页面用来设置跨域COOKIE    header( 'Content-Type:text/html; charset=utf-8' );   if ( empty empty ( $_GET )){        exit ( '您还未登录' );   } else {        foreach ( $_GET   as   $key => $val ){           setcookie( $key , $val ,0, '' );       }       header( "location:index.php" );   }  ?>    <?php   //connect.php 用来检测登录状态的页面,内嵌在页面的iframe中    header( 'Content-Type:text/html; charset=utf-8' );   if (isset( $_COOKIE [ 'sign' ])){        $callback  = urldecode( $_GET [ 'callback' ]);unset( $_GET [ 'callback' ]);        $query  = http_build_query( $_COOKIE );        $callback  =  $callback . "?{$query}" ;   } else {  //开源代码phpfensi测试数据        exit ;   }   ?>  <html><script type= "text/javascript" >top.location.href= "<?php echo $callback; ?>" ;</script></html> 

查看更多关于php sso单点登录实现代码 - php高级应用的详细内容...

  阅读:68次