• 关于跨域名的信息共享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);
        }
  • 相关阅读:
    验证码生成程序
    会话技术Cookie&Session
    jsp基础、el技术、jstl标签、javaEE的开发模式
    js原生的Ajax
    java基础-反射
    hibernate 联合主键 composite-id
    在ubuntu18 安装nginx过程,以及遇到的错误!
    报错解决:error: this statement may fall through [-Werror=implicit-fallthrough=]
    nginx.conf中关于nginx-rtmp-module配置指令详解
    搭建Nginx+nginx-rtmp-module的hls流媒体服务器并用OBS进行推流
  • 原文地址:https://www.cnblogs.com/patf/p/5613490.html
Copyright © 2020-2023  润新知