Le contenu de cet article explique comment PHP implémente l'authentification unique (exemple de code) via une vision partagée. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Je n'ai rien à faire récemment, j'ai donc résumé et réglé les problèmes d'authentification unique.
Le principe de base de l'authentification unique est le suivant : le client partage l'ID de session et le serveur partage les informations de session. En obtenant les mêmes informations de session côté serveur via un identifiant de session commun, l'objectif de l'authentification unique peut être atteint (c'est-à-dire que plusieurs sites partagent des informations utilisateur, se connectent à un seul endroit et peuvent être utilisés partout).
L'authentification unique se divise en deux situations :
Dans ce cas. , il vaut mieux résoudre.
<code><span style="font-size: 14px;"></span>
ini_set('session.cookie_domain', '.xxxx.com'); //设置服务器cookie的域,xxxx为公用二级域名
$back = login($name,$pwd);//执行登陆操作,成功就写入session //如果登录成功,进行以下操作流程 if($back){ $sessionid = session_id(); $key = encode($session,$keyword);//生成安全码 //输出一个登陆成功提示页,并跳转到请求登陆的站点 }
Ajoutez le code suivant à la page d'invite HTML de connexion réussie et utilisez la balise iframe pour demander le site qui doit être connecté simultanément
//解密 $keydecode($key); //把当前站点的sessionid设置为传递的sessionid session_id($_GET['sessionid']); session_start();
$gb_DBname="test"; //数据库名称 $gb_DBuser="root"; //数据库用户名称 $gb_DBpass=""; //数据库密码 $gb_DBHOSTname="127.0.0.1"; //主机的名称或是IP地址 $SESS_DBH=""; //数据库对象 session_module_name("User"); //定义session存储按用户定义的方式 $SESS_LIFE=get_cfg_var("session.gc_maxlifetime");//得到session的最大有效期,也可以自定义 function sess_open($save_path,$session_name){ global $gb_DBHOSTname,$gb_DBname,$gb_DBuser,$gb_DBpass,$SESS_DBH; if(!$SESS_DBH=mysql_pconnect($gb_DBHOSTname,$gb_DBuser,$gb_DBpass)){ echo "MySql Error:".mysql_error().""; die(); } if(!mysql_select_db($gb_DBname,$SESS_DBH)){ echo "MySql Error:".mysql_error().""; die(); } return true; } function sess_close(){ return true; } function sess_read($key){ global $SESS_DBH,$SESS_LIFE; $qry="select value from db_session where sesskey = '$key' and expiry > ".time(); $qid=mysql_query($qry,$SESS_DBH); if(list($value)=mysql_fetch_row($qid)){ return $value; } return false; } //写入session信息。保存session信息的数据表名为:db_session //除了主键自增id,需要的字段如下 //sesskey sessionid //values session值 //expiry session的到期日期 function sess_write($key,$val){ global $SESS_DBH,$SESS_LIFE; $expiry=time()+$SESS_LIFE; $value=$val; $qry="insert into db_session values('$key',$expiry,'$value')"; $qid=mysql_query($qry,$SESS_DBH); if(!$qid){ $qry="update db_session set expiry=$expiry, value='$value' where sesskey='$key' and expiry >".time(); $qid=mysql_query($qry,$SESS_DBH); } return $qid; } function sess_destroy($key){ global $SESS_DBH; $qry="delete from db_session where sesskey = '$key'"; $qid=mysql_query($qry,$SESS_DBH); return $qid; } function sess_gc($maxlifetime){ global $SESS_DBH; $qry="delete from db_session where expiry < ".time(); $qid=mysql_query($qry,$SESS_DBH); return mysql_affected_rows($SESS_DBH); } session_set_save_handler("sess_open","sess_close","sess_read","sess_write","sess_destroy","sess_gc");
partage de session de site de nom de domaine de deuxième niveau thinkphp (authentification unique)
php réalise système Web unique Cliquez pour vous connecter
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!