• 关于跨域名的信息共享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 _O3webController;
    
    use ThinkController;
    
    /*
     * @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 _O3webController;
    
    use ThinkController;
    
    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(){
            PredisAutoloader::register();  
            $a = new PredisClient();
            $info = $a->get($_COOKIE['token']);
            return json_decode($info,TRUE);
        }
  • 相关阅读:
    1-EI-灵魂画手解释安卓的Message对象
    2-VVI-材料设计之TabLayout下标签
    1.安卓基础之Activity生命周期
    golang复制一个指针对象(反射)
    小罗的面试题
    http1.0 、http1.1和http2.0的区别
    HTTP长连接、短连接究竟是什么?
    详解TCP中的拥塞控制
    TCP怎么保证传输的安全性
    ulimit设置完在其他用户上没有生效解决办法
  • 原文地址:https://www.cnblogs.com/patf/p/5613490.html
Copyright © 2020-2023  润新知