首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>PHP教程>资讯:PHP版单点登陆实现方案

PHP版单点登陆实现方案

www.jz123.cn  2009-05-25   来源:   PHPChina    责任编辑(袁袁)    我要投递新闻

  4. 单点登出时,调用UClientSSO::logoutSSO()方法。调用成功后,如需其他已登陆站立即登出,请调用 UClientSSO::getSynloginScript()方法获取W3C标准的script,在页面输出。

  a) UClientSSO::logoutSSO()方法如下:

  [php]/**

  * 全站单点登出

  * - 通过webservice请求注销掉用户的全站唯一标识

  *

  * @return integer 1: 成功

  * -11:验证码错误

  */

  public static function logoutSSO(){

  self::_init();

  $_sessId = self::_getLocalSid();

  //

  //本站没有登陆的话,不让同步登出其他站

  //

  if (empty($_sessId)) {

  self::_initSess(true);

  return false;

  }

  $_params = array(

  'sessId' => $_sessId,

  'siteFlag' => self::$site,

  'checksum' => md5($_sessId . self::$site . self::$_mcComunicationKey)

  );

  $aRet = self::_callSoap('logoutUCenter', $_params);

  if (intval($aRet['resultFlag']) > 0) {

  //成功登出

  self::_removeLocalSid(); //移除本站记录的sid存根

  self::$_synlogoutScript = urldecode($aRet['script']);

  $ret = 1;

  } else {

  $ret = $aRet['resultFlag'];

  }

  return intval($ret);

  } [/php]

  b) 用户验证中心的webservice服务程序,接收到全站登出请求后,调用UCenter::loginUCenter()方法来处理登陆请求:

  [php]/**

  * 登出全站处理

  *

  * @param string - 全站唯一session id,用做ticket

  * @return boolean

  */

  static public function logoutUCenter($sessId) {

  self::_init();

  session_id(trim($sessId));

  session_start();

  $_SESSION = array();

  return empty($_SESSION) ? true : false;

  }[/php]

  四. 代码部署:

  1. 用户验证中心设置

  a) 用户验证中心向分站提供的webservice服务接口文件,即UserSvc.php部署在hostname/webapps/port/ UserSvc.php中。查看wsdl内容,请访问https://hostname/port/ UserSvc.php?wsdl

  b) 用户中心用户单点服务类文件为UCenterSSO.class.php,文件路径为在hostname/webapps/include /UCenterSSO.class.php。该文件为用户单点登陆处理 的服务端类,被hostname/webapps/port/ UserSvc.php调用。用于获取用户的登陆信息,是否单点登陆的状态信息,单点登出处理等。

  c) 用户验证中心通过W3C标准,利用cookie方式记录,删除全站统一的用户唯一随机id 的脚本文件为hostname/webapps/port/cookie_mgr.php.

  2. 子站点设置

  a) 各子站点请将,UClientSSO.class.php部署在用户中心服务客户端目录下。部署好后,请修改最后一行的UClientSSO::setSite('1'); 参数值为用户验证中心统一分配给各站的标识id.

  b) 在部署的用户中心服务客户端包下的api目录下下,请将logout_sso.php脚本转移到此处,并编写进行本站登出的处理脚本。

  c) 在子站点验证用户登陆状态的代码部分,额外增加到用户中心的单点登陆验证的处理。

  即在首先通过本站验证用户的登陆状态,如果未通过验证,则去用户中心验证。验证操作要调用UClientSSO::checkUserLogin();接口,接口含义请查看代码注释。

  d) 在分站的登出处理脚本中,通过UClientSSO::getSynlogoutScript();获取script串输出即可。

  五. 扩展功能:

  1. 记录跟踪所有在线用户

  因为所有用户的登录都要经过用户验证中心,所有用户的ticket都在验证中心生成,可以将用户和该ticket(session id)在内存表中建立一个映射表。得到所有在线用户的记录表。

  后期如有必要跟踪用户状态来实现其他功能,只要跟踪这个映射表就可以了。其他功能可以为: 获取在线用户列表,判断用户在线状态,获取在线用户人数等。

  2. 特殊统计处理

  因为整个系统登录登出要经过用户验证中心,所以可以针对用户的特殊统计进行处理。如用户每天的登录次数,登陆时间,登陆状态失效时间,各时段的在线用户人数走势等。

  六. 其他事项:

  1. 本站登陆状态有效时间问题:

  全站要求用户登陆状态在关闭浏览器时就失效。要求各分站对session或cookie的处理方式按照如下进行:

  a) Session方式记录用户登陆状态的站点

  请在站点公用脚本开始处,添加一下代码

  [php]session_write_close();

  ini_set('session.auto_start', 0); //关闭session自动启动

  ini_set('session.cookie_lifetime', 0); //设置session在浏览器关闭时失效

  ini_set('session.gc_maxlifetime', 3600); //session在浏览器未关闭时的持续存活时间 [/php]

  b) cookie方式记录用户登陆状态的站点

  请在设置用户登陆状态的cookie时,设置cookie有效时间为null.

上一篇:PHP写采集心得 下一篇:在HTML中利用js调用php的内容

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图