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
session跨域共享解决方案的更多相关文章
- session跨域共享问题解决方案
在讨论 session 跨域共享问题之前,我们首先要了解 session 做了什么,没做什么 1.HTTP是无状态的,也就是说服务器不知道谁访问过他,但是有时间,又需要我们去保留这个状态比如说用户的登 ...
- 使用Spring Session和Redis解决分布式Session跨域共享问题
http://blog.csdn.net/xlgen157387/article/details/57406162 使用Spring Session和Redis解决分布式Session跨域共享问题
- 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...
- thinkphp session 跨域问题解决方案
session 跨域,困扰我好几天,今天终于弄明白了! 不管是thinkphp ,还是本身的php 其实都要设置session.cookie_domain 设置好,就OK了 在thinkphp 里,在 ...
- Yii2 框架下 session跨域共享互通
在项目实施过程中,往往把一个大项目进行分拆成几个独立的项目,项目用完全独立的域名和文件,可以放到不同的服务器上的独立分项目. 几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, ...
- session跨域共享
www.maxomnis.com的index.php文件内容 <?phpsession_start();setcookie("user", "alex proter ...
- 【分布式系列】session跨域及单点登录解决方案
Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息. ...
- sso单点登录的入门(Session跨域、Spring-Session共享)
1.单点登录,就是多系统,单一位置登录,实现多系统同时登录的一种技术.单点登录一般是用于互相授信的系统,实现单一位置登录,全系统有效的. 区分与三方登录(第三方登录) ,三方登录:某系统,使用其他系统 ...
- 跨域共享cookie和跨域共享session
转载自:http://blog.csdn.net/ahhsxy/article/details/7356128 这里所说的跨域,是指跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下 ...
随机推荐
- Json-lib - java.util.Date 转换问题
使用 JSON-lib 将 java.util.Date 对象直接转换成 JSON 字符串时,得到的通常不是想要格式: System.out.println(JSONSerializer.toJSON ...
- c# json转Dictionary字典
JavaScriptSerializer s = new JavaScriptSerializer(); string jsonTexts = "{\"count\" ...
- aspjpeg 半透明描边的实现函数
'参数说明 'big 原图路径(相对) 'small 生成图路径(相对) 'width_s 生成后宽度(数值型) 'height_s生成后高度(数值型) 'images/Alpha.jpg 为一个像素 ...
- git subtree
语法:git subtree split -P <被裁减的目录> -b <分支> git subtree split -P SDK/CustomUI(需要裁减的) -b Cus ...
- Asp.Net Cookie的清除
背景 最近做到一个asp.net项目,项目中保存用户信息用到了cookie,因此,在注销身份的时候,就需要清除掉cookie. 探索过程 我先是试验了这种代码,在没有特殊声明前,代码都是写在Page_ ...
- oracle-替换 换行符和空格符
--换行或空格: )), '') --换行及空格: update tableName set columnName= ), ), '')
- 一步一步搭建 OAuth 认证服务器
http://www.fising.cn/2011/03/%E4%B8%80%E6%AD%A5%E4%B8%80%E6%AD%A5%E6%90%AD%E5%BB%BA-oauth-%E8%AE%A4% ...
- 对 ASP.NET 页面进行跟踪(Control Tree)
在页面头部加入属性 : Trace="True" 参考MSDN: https://msdn.microsoft.com/zh-cn/library/94c55d08(v=vs.10 ...
- 第四篇、C_快速、冒泡、选择、插入排序、二分查找排序、归并、堆排序
1.快速排序 实现: 1.取中间一个数作为支点 2.分别在支点的左右两边进行查找,如果左边查找到比支点大,右边查找到比支点小,就交换位置,如此循环,比支点小的数就排在了左边,比支点大的就排在右边 3. ...
- mac配置svn服务器
1创建svn库:mudydeMacBook-Air:~ mudy$ svnadmin create /Users/mudy/svn 2进行配置,配置我们的svn a.将svnsever.con ...