Carey【胭脂扣】

关于跨域名的信息共享P3P实例

 首先我这里用到了redis 和 p3p技术。当然任意的nosql都可以满足

模拟的一个登陆访问的客户端。

<?php
session_start();
$get = $_GET;

if($get['uname'] == 'ftt'&& $get['pass'] == '123')
{
$token = md5(rand());
$_SESSION['user'] = 'ftt';
$_SESSION['islogin'] = 1;



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','6379');
}

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()+3600,'/');
    }

    
    
}

我会在自己的需要的页面的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',1);  //如果is_uid是1那么就是登录状态
            }else{
                $this->assign('is_uid',2);  //如果is_uid是2那么就是没有登录
            }
        }else{
            $this->assign('is_uid',2);  //如果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);
    }

 

posted @ 2016-06-24 10:58  胭脂筘  阅读(236)  评论(0编辑  收藏  举报