本文实例讲述了php实现多站点共用ssion实现单点登录的方法。分享给大家供大家参考,具体如下:
最近闲来无事,总结整理下单点登录的问题。
单点登录的基本原理为:客户端共享sionid,服务器端共享ssion信息。通过共同的ssionid在服务器端获得相同ssion信息,即可mine mine达到单点登录(即多站点共享用户信息,一处登录,处处可用)的目的。
单点登录分为两种情况:
一、站点部署在同一个服务器,且使用同一个二级域名
这种情况下,比较好解决。
1、首先解决站点在客户端ssionid(存在cookie中)的共享问题。使用ini_t()函数即可指定cookie的域,如下: ini_t('ssion.cookie_domain', '.xxxx.com');
//设置服务器cookie的域,xxxx为公用二级域名
2、其次解决站点在服务端的ssion信息的共享。因为站点在同一个服务器,所以生成的ssion文件是可以公用的,可以直接使用ssionid获取对应的ssion信息。
二、站点部署在不同的服务器,使用不同域名
这种情况比较复杂,因为站点在不同服务苦瓜怎么做不苦器使用不同域名,在客户端不能使用ini_t设置cookie的作用域,在服务器端也是各自生成自己的ssion文件,不能共用,但还是用解决的办法。
1、首先解决客户端ssionid同步问题。
假设我们有三个站点,域名分别是aa.com,bb.com,cc.com。我们在aa.com上建立一个共用的登陆入口login.php,三个网站的登陆请求全部跳转到该页面。代码流程如下:
$back = login($name,$pwd);//执行登陆操作,成功就写入ssion//如果登录成功,进行以下操作流程if($back){ $ssionid = ssion_id(); $key = encode($ssion,$keyword);//生成安全码 //输出一个登陆成功提示页,并跳转到请求登陆的站点}
在登陆成功html提示页面中添加如下代码,利用iframe标签请求需要同步登陆的站点
aa.com和cc.com站点的t_cookie.php文件如下
//解密$keydecode($key);//把当前站点的ssionid设置为传递的ssionidssion_id($_get['ssionid']);ssion_start();
2、解决三个站点服务器端共享ssion的问题。
前面已经说过,因为三个站点不在同一个服务器,因此会生成各自的ssion文件,如果想要共享这些文件,又面临跨域等一系列问题。所以我们转化思路,不使用文件保存ssion信息,而是把ssion信息保存到数据库中。这样,只要获得ssion信息的ssionid,任何站点都可以访问相同的ssion信息。
我们创建一个mysql_ssion.php文件,用于存储ssion信息到数据库,代码如下
$gb_dbname="test"; //数据库名称$gb_dbur="root"; //数据库用户名称$gb_dbpass=""; //数据库密码$gb_dbhostname="127.0.0.1"; //主机的名称或是ip地址$ss_dbh=""; //数据库对象ssion_module_name("ur"); //定义ssion存储按用户定义的方式$ss_life=get_cfg_var("ssion.gc_maxlifetime");//得到ssion的最大有效期,也可以自定义function ss_open($save_path,$ssion_name){ global $gb_dbhostname,$gb_dbname,$gb_dbur,$gb_dbpass,$ss_dbh; if(!$ss_dbh=mysql_pconnect($gb_dbhostname,$gb_dbur,$gb_dbpass)){ echo "mysql error:".mysql_error().""; die(); } if(!mysql_lect_db($gb_dbname,$ss_团队建设论文dbh)){ echo "mysql error:".mysql_error().""; die(); } return true;}function ss_clo(){return true;}function ss_read($key){ global $ss_dbh,$ss_life; $qry="lect value from db_ssion where sskey = '$key' and expiry > ".time(); $qid=mysql_query($qry,$ss_dbh); if(list($value)=mysql_fetch_row($qid)){ return $value; } return fal;}//写入ssion信息。保存ssion信息的数据表名为:db_ssion//除了主键自增id,需要的字段如下//sskey ssionid//values ssion值//expiry ssion的到期日期function ss_write($key,$val){ global $ss_dbh,$ss_life; $expiry=time()+$ss_life; $value=$val; $qry="inrt into db_ssion values('$key',$expiry,'$value')"; $qid=mysql_query($qry,$ss_dbh); if(!$qid){ $qry="update db_ssi二次元美女图on t expiry=$expiry, value='$value' where sskey='$key' and expiry >".time(); $qid=mysql_query($qry,$ss_dbh); } return $qid;}function ss_destroy($key){ global $ss_dbh; $qry="delete from db_ssion where sskey = '$key'"; $qid=mysql_query($qry,$ss_dbh); return $qid;}function ss_gc($maxlifeti痴迷的英文me){ global $ss_dbh; $qry="delete from db_ssion where expiry < ".time(); $qid=mysql_query($qry,$ss_dbh); return mysql_affected_rows($ss_dbh);}ssion_t_save_handler("ss_open","ss_clo","ss_read","ss_write","ss_destroy","ss_gc");
之后在需要使用ssion的页面中,在ssion_start()之前引入该文件,其他的跟平时使用esion一样就可以了。你会发现你赋值的ssion已经被存进了数据库中。
本文发布于:2023-04-08 07:34:38,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/d036026bb442267bd86fabdef4b0a1e8.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:php实现多站点共用session实现单点登录的方法详解.doc
本文 PDF 下载地址:php实现多站点共用session实现单点登录的方法详解.pdf
留言与评论(共有 0 条评论) |