要让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

session跨域共享解决方案的更多相关文章

  1. session跨域共享问题解决方案

    在讨论 session 跨域共享问题之前,我们首先要了解 session 做了什么,没做什么 1.HTTP是无状态的,也就是说服务器不知道谁访问过他,但是有时间,又需要我们去保留这个状态比如说用户的登 ...

  2. 使用Spring Session和Redis解决分布式Session跨域共享问题

    http://blog.csdn.net/xlgen157387/article/details/57406162 使用Spring Session和Redis解决分布式Session跨域共享问题

  3. 170222、使用Spring Session和Redis解决分布式Session跨域共享问题

    使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...

  4. thinkphp session 跨域问题解决方案

    session 跨域,困扰我好几天,今天终于弄明白了! 不管是thinkphp ,还是本身的php 其实都要设置session.cookie_domain 设置好,就OK了 在thinkphp 里,在 ...

  5. Yii2 框架下 session跨域共享互通

    在项目实施过程中,往往把一个大项目进行分拆成几个独立的项目,项目用完全独立的域名和文件,可以放到不同的服务器上的独立分项目. 几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, ...

  6. session跨域共享

    www.maxomnis.com的index.php文件内容 <?phpsession_start();setcookie("user", "alex proter ...

  7. 【分布式系列】session跨域及单点登录解决方案

    Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息. ...

  8. sso单点登录的入门(Session跨域、Spring-Session共享)

    1.单点登录,就是多系统,单一位置登录,实现多系统同时登录的一种技术.单点登录一般是用于互相授信的系统,实现单一位置登录,全系统有效的. 区分与三方登录(第三方登录) ,三方登录:某系统,使用其他系统 ...

  9. 跨域共享cookie和跨域共享session

    转载自:http://blog.csdn.net/ahhsxy/article/details/7356128 这里所说的跨域,是指跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下 ...

随机推荐

  1. akka构建简单分布式应用

    http://www.cnblogs.com/hequn/articles/3764630.html 当程序的要求达到一台计算机的极限时,我们便需要将程序分布式化,让程序运行在多台计算机上.akka提 ...

  2. 以 280W 数据为依据。对比SQL2008 表分区前和分区后的 T_SQL 效率

    一: 数据库的优化一直项目后期的重中之重,特别是当单表数据庞大到1000W时候.各种SQL语句执行效率都会慢很多.SQL 效率 与索引,行数据,列数据,以及Where 刷选字段类型 (效率 整数型大于 ...

  3. 仿php的日期函数,asp时间处理函数

    <% '****************************** '时间处理函数 'FormatDate(Str,DateTime) 'Str 字符串,DateTime 时间 '返回类型为字 ...

  4. ACM——快速排序法

    快速排序 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:653            测试通过:297 描述 给定输入排序元素数目 ...

  5. iOS scrollView/tableView滚动到底部

    //项目要求tableView滚动到底部就自动加载下一页,UITableView继承自UIScrollView 所以可以在//scrollViewDidEndDecelerating这个方法中进行判断 ...

  6. Flex布局新旧混合写法详解(兼容微信)

    原文链接:https://www.usblog.cc/blog/post/justzhl/Flex布局新旧混合写法详解(兼容微信) flex是个非常好用的属性,如果说有什么可以完全代替 float 和 ...

  7. 写入.csv文件

    #include "stdafx.h" #include "WriteCsv.h" CString m_strData;//写入记录的一条数据 CString ...

  8. WPF设置窗口模式(Windowstyle=“None”)

    当WindowStyle="None"时,设置AllowsTransparency="True",则不会出现黑色Border,然后可以另外设置外边的Border ...

  9. OpenJudge/Poj 1936 All in All

    1.链接地址: http://poj.org/problem?id=1936 http://bailian.openjudge.cn/practice/1936 2.题目: All in All Ti ...

  10. C#拓展练习之模拟键盘录入

    摘自<31天学会CRM项目开发<C#编程入门级项目实战>> 使用C#调用Windows API使程序模拟键盘输入,也可模拟按下快捷键.本例中,单击“模拟输入”按钮,可录入字符“ ...