zoukankan      html  css  js  c++  java
  • session跨域共享解决方案

    要让session跨域共享,需要解决三个问题

      1、通过什么方法来传递session_id?

      2、通过什么方法来保存session信息?

      3、通过什么方法来进行跨域?

      一、传递session_id有4种方法

      1、 通过cookie

      2、 设置php.ini中的session.use_trans_sid=1,让PHP自动跨页传递session id

      3、 手动通过url或隐藏表单传值

      4、 用文件或数据库方式传递,在通过其他key对应取值

      二、保存session信息有3种方法

        1、数据库

        2、memcache

        3、共享文件

      三、跨域访问的方法

        1、通过服务器(php脚本)

          2、通过JavaScript

      由于,各种原因。我选择的方案是:

        1、cookie传递session_id

        2、文件保存sesson信息

        3、通过服务器脚本跨域

      啥也不说了,上代码了。这两段代码都是用php脚本设置的

        设置允许跨域的域名:

    $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; 
    $allow_origin = array( 
        'http://two.google.com',
        'http://three.google.com'
    );
    header("Access-Control-Allow-Credentials: true");
    if(in_array($origin, $allow_origin)){  
        header('Access-Control-Allow-Origin:'.$origin);       
    }    

        设置跨域的cookie

    if(!isset($_COOKIE['session_idx'])){
        $session_id = session_id();
        setcookie("session_idx", $session_id, time()+3600*24*365*10, "/", ".google.com");//这里.google.com的作用是让www.google.com、two.google.com等二级域名可以共享这可cookie
        $_SESSION['userName'] = 'ok';
    }else{
        session_id($_COOKIE['session_idx']);
    }
    echo $_SESSION['userName'];

        

    访问跨域的api时,不附带cookie问题的解决代码,需要操作两个步骤:(使用jquery的ajax方法)

    1、写好客户端的js代码

    $("#getCodeBtn").click(function(){
      var phone = $("#phoneNum").val();
      $.ajax({
        type: "POST",
        url: 'http://www.google.com/index.php/register/getCode',
        dataType: 'jsonp',
        data: {'phoneNum':phone, 'crossDomain':true},
        xhrFields: {
                  withCredentials: true
        },
        crossDomain: true,
        success:function(data){
          if(data.responseCode == '101'){
            alert('成功');
          }else if(data.responseCode == '100'){
         alert('失败');
          }
        },
        error:function(data1, data2, data3){
          alert(data1+'--'+data2+'--'+data3);
        }
      });
    });

    2、写好服务器端的代码

    <?php
       //callback参数是jquery生成的
    $callBack = $_GET['callback']; $data = array('responseCode'=>'101', 'responseMessage'=>'success');
       //下面的格式,才会被jquery解析
    $responseData = $callBack.'('.json_encode($data).')'; echo $responseData; ?>

    这种方案,有不能跨服务器的缺陷。跨域还有些坑,有待发掘。

      

       参考的网址:

        http://blog.163.com/lgh_2002/blog/static/4401752620105810501715/

        http://tw5566.iteye.com/blog/1945825

  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/sustudy/p/5332584.html
Copyright © 2011-2022 走看看