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

Posted 胭脂扣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于跨域名的信息共享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);
    }

 

以上是关于关于跨域名的信息共享P3P实例的主要内容,如果未能解决你的问题,请参考以下文章

PHP利用P3P实现跨域

PHP如何利用P3P实现跨域

关于多级域名跨域知识小记

SSO单点登录-简单实现

关于跨域 HTTP 请求

关于Android的okHttp+webview的cookie跨域问题