首先我这里用到了redis 和 p3p技术。当然任意的nosql都可以满足
模拟的一个登陆访问的客户端。
<?php
session_start();
$get = $_GET; if($get['uname'] == 'ftt'&& $get['pass'] == '')
{
$token = md5(rand());
$_SESSION['user'] = 'ftt';
$_SESSION['islogin'] = ; save_redis($token,json_encode($_SESSION));
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
$file .= '<script type="text/javascript" src="http://o3web.demo.com/P3pApi/index?token='.$token.'" reload="1"></script>';
echo $file; }
else
{
echo 'None';
} function save_redis($keys,$value)
{
try{
$_redis = new Redis();
$res = $_redis->connect('10.10.112.195','');
} catch(RedisException $e)
{
print_r($e);
} $_redis->set($keys,$value); } ?>
下面是接受的接口。
<?php namespace _O3web\Controller; use Think\Controller; /*
* @desc
* @author Carey
* @time 2016年4月25日14:50:44
* @ps 用于和o3提交数据的
*/ /* p3p协议用于对o3登录用户的sesion信息获取 */
class P3pApiController extends BaseController { /* 获取p3p协议的 token标示并写入cookie中 */
public function index() {
$token = I('get.token');
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie('token', $token, time()+,'/');
} }
我会在自己的需要的页面的init或者bese里面加载。
<?php
/*
* 公用控制器
* @author Carey
*/
namespace _O3web\Controller; use Think\Controller; class BaseController extends Controller { public function _initialize(){
load_ext_config('configType',FALSE); //调用配置文件
$ref = $this->set_ref();
$this->assign('ref',$ref); /* 将o3的用户登录信息 */
$userinfo = array();
if(!isset($_SESSION['userinfo']) && empty($_SESSION['userinfo'])){ //如果SESSION中没有用户信息那么通过redis获取p3ptoken中的用户信息
$userinfo = $this->P3p();
if(!empty($userinfo)){
$_SESSION['userinfo'] = $userinfo;
$this->assign('is_uid',); //如果is_uid是1那么就是登录状态
}else{
$this->assign('is_uid',); //如果is_uid是2那么就是没有登录
}
}else{
$this->assign('is_uid',); //如果is_uid是2那么就是没有登录
} } /* p3p获取o3用户登录信息 */
public function P3p(){
\Predis\Autoloader::register();
$a = new \Predis\Client();
$info = $a->get($_COOKIE['token']);
return json_decode($info,TRUE);
}