php如何实现单点登录jira,在PHP中实现单点登录(Single Sign On)的简单方法

http://hi.baidu.com/keepnet/blog/item/ada25d1caad26d144134175c.html 单点登录是大容量系统必备的功能,市面上有几款昂贵的商业系统,若不是财大气粗,恐怕用不起。 怎么样才能简单、经济的实现这个功能?我们在这里探讨一种可行的方案。 当前开发Web应用

http://hi.baidu.com/keepnet/blog/item/ada25d1caad26d144134175c.html

单点登录是大容量系统必备的功能,市面上有几款昂贵的商业系统,若不是财大气粗,恐怕用不起。

怎么样才能简单、经济的实现这个功能?我们在这里探讨一种可行的方案。

当前开发Web应用中,Apache + PHP + MySQL是中小型企业降低成本的必选架构,这里我们来实现PHP的单点登录,让这种经济性的架构能够扩展到的群集服务器层面。

我们的设想是将PHP的Session数据集中存储,这样对于不同服务器中运行的PHP来说,只有一个共有的Session数据库,那么用户在服务器A登 录所生成的Session数据在服务器B、C、D等服务器都可以共享,就可以免除多次登录。但由于PHP的Session是需要Cookie的,而 Cookie又是与域名相关的,所以采用这个方案的各个服务器需要有相同的域名(至少是相同的二级域名),比如:

1、所有服务器的域名都是www.766.com,这个东东DNS轮询就可以实现;这个时候,在PHP中将Cookie域名设置为www.766.com即可;

2、所有服务器的域名都是以.766.com结尾的三级域名,比如a.766com,b.766.com等等,这个时候,在PHP中将Cookie域名设置为.whybsd.com就可以共享Cookie了。

解决了先决条件,我们现在来看看PHP的Session存储方法,在PHP手册说明中,有一个叫session_set_save_handler()的函数,这个函数是用来注册用户自定义的Session数据存储接口的。

以下是PHP手册自带的示例:

functionopen($save_path,$session_name)

{

global$sess_save_path;$sess_save_path=$save_path;

return(true);

}

functionclose()

{

return(true);

}

functionread($id)

{

global$sess_save_path;$sess_file="$sess_save_path/sess_$id";

return (string) @file_get_contents($sess_file);

}

functionwrite($id,$sess_data)

{

global$sess_save_path;$sess_file="$sess_save_path/sess_$id";

if ($fp= @fopen($sess_file,"w"))

{$return=fwrite($fp,$sess_data);fclose($fp);

return$return;

} else {

return(false);

}

}

functiondestroy($id)

{

global$sess_save_path;$sess_file="$sess_save_path/sess_$id";

return(@unlink($sess_file));

}

functiongc($maxlifetime)

{

global$sess_save_path;

foreach (glob("$sess_save_path/sess_*")

as$filename) {

if (filemtime($filename)

+$maxlifetime

{

@unlink($filename);

}

}

returntrue;

}session_set_save_handler("open","close","read","write","destroy","gc");session_start();// proceed to use sessions normally?>

按照这种思路,我们只要编写自己的处理函数并进行相应的注册,就可以实现PHP Session数据的自定义存储了。

具体实现可以使用多种方案,比如可以使用NFS将Session数据存储到统一的网络设备中,也可以将Session数据保存到一个数据库中,让所有服务器连接这个共享数据库(比如MySQL)就可以了。

嗯,比较简单,而且经济。

更多考虑:

1、性能需要考量,特别是服务器数(引起资源占用)和用户量(引起Session量)非常巨大的时候。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值