要实现多域名共享session,首先就得了解SESSION的运行机制。基本概念我就不说了。

session是这样运行的:

用户A访问站点Y,如果站点Y执行了session_start();(以下假定session_start()总是存在)那么会产生一个 session_id,这个session id一般会以COOKIE的形式保存到用户A(我们可以通过在php.ini里设置session.use_only_cookies为1,强制SESSION ID必须以COOKIE传递。)。这时候SESSION ID表现为$_COOKIE['PHPSESSID'];(PHPSESSID可用session_name()函数来修改)

用户A接着访问,这个session id($_COOKIE['PHPSESSID'])就会在A每次访问Y的时候传送到站点Y。

在站点Y上,会有这么一个目录,是用来保存SESSION的实际数据的。站点Y接收到session id,然后通过session id,来获得与SESSION数据的关联,并返回SESSION数据。

可能聪明的你已经想到了,既然服务器端和客户端之间的SESSION是通过一个SESSION ID来联系,并且SESSION数据是以普通文件的形式保存在一个特定的文件夹里。

那么我们要实现不同域名,只需要满足以下两个条件:

1)不同域名的SESSION数据目录统一到一起,或者同步更新。

2)对同一个客户,使用统一的一个SESSION ID

第一个条件的实现。

如果是同一台服务器,就不需要进行任何设置了。

如果是集群/分布式的,那么我想也不需要我来说了。。能做分布式应用的,在目录共享方面的经验应该比我丰富。我也没有进行过多服务器的测试,主客观条件的原因都有。

我在这里主要是想说一下第二个条件——使不同的域名,拥有统一的SESSION ID。

那我们应该怎么统一呢?

首先必须在不同域名之间传递这个SESSION ID,且由于 cookie必须是针对域名的,所以传递动作是由客户端来完成。如果传递过程不是由客户端来完成,那么接受传递的域名就不知道针对的是哪个客户。

其次就是修改接受传递的域名下的SESSION ID。

如何传递:

HTML里,我们可以使用很多种方法。例如

iframe

或者.js

或者是一个img html元素

%E2%80%9D%22

只要能调用某个地址,就行。

在wml里,由于wml script的特点,我们无法使用script这样的形式来调用,而wml里也没iframe..但是我们还是可以通过img来实现传递的。

如何修改:

既然SESSION ID一般情况下是通过COOKIE来传递,那么我们只需要通过传递$_COOKIE['PHPSESSID'];即可。但是如果PHPSESSID被session_name改变了,我们又得修改setcookie中的PHPSESSID..这样就会变得很麻烦。。所以我们可以选择一个session特有的函数session_id来修改$_COOKIE['PHPSESSID'];

需要注意的几点:

如果session.use_only_cookies为0(PHP默认),那么session id有可能会以url或其他形式传递

session_id()和session_name必须在session_start()前使用

以下是我写的一个简单的实现多域名的类。如果上面的看不太明白,可以看看我的这个多域名类。这个类是在HTML下以iframe形式实现的。

/*

使用:

服务器A,服务器B,在A的index.php登陆,在B里建立一个接收SESSION的文件,例如ses_get.php

A的index.php做如下修改

最开始加上session_start();

而ses_get.php则在开头写上mdSession::_get();

@作者:surfchen@gmail.com http://www.surfchen.org/*/

function mdSession()

{

}function set($urls)

{if (!is_array($urls))

{$urls=array($urls);}foreach ($urls as $value)

{echo '';}return true;}function get()

{session_id($_SERVER['QUERY_STRING']);session_start();return true;}function _set($urls)

{$obj=new mdSession();return $obj->set($urls);}function _get()

{$obj=new mdSession();return $obj->get();}

}?>

index.php :

include "mdSession.php";

session_start();

$_SESSION['php']="yogurt8";

mdSession::_set('http://www.b.com/ses_get.php');

var_dump($_SESSION);

?>

ses_get.php

include "mdSession.php";

mdSession::_get();

?>

b.php :

session_start();

var_dump($_SESSION);

先访问 http://www.a.com/a.php 然后在 http://www.b.com/b.php 看效果

在firefox 与谷歌浏览器是没问题,但在 Ie 下还是不行

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php session域名共享,实现多域名下共用一个SESSION相关推荐

  1. php支持二级域名共享,PHP二级域名session共享方案

    一般来讲网站都会有主站和子站,比如域名是linuxidc.com,那么一般来讲linuxidc.com和www.linuxidc.com就会是主站,而像bbs.linu 一般来讲网站都会有主站和子站, ...

  2. memcached实现多个tomcat共享一个session

    好工具-站长资讯.经验.工具分享平台 首页 互联网 网站运营 站长工具 网络编程 当前位置:  好工具 >>  网络编程 >>  .Net编程 作者:dylinshi126 | ...

  3. PHP实现同服务器多个二级域名共享 SESSION

    现在很多分类信息网站都会分出很多个二级域名出来,比如:sh.ganji.com(上海赶集网), su.ganji.com(苏州赶集网)等等,像这种拥有多个二级域名的网站,该如何实现同步共享sessio ...

  4. TP、PHP同域不同子级域名共享Session、单点登录

    TP.PHP同域不同子级域名共享Session.单点登录 目的: 为了部署同个域名下不同子级域名共享会话,从而实现单点登录的问题,一处登录,同域处处子系统即可以实现自动登录. PHP支持通过设置coo ...

  5. java多域名共享session_同一服务器不同域名session共享

    Tomcat下,不同的二级域名之间或根域与子域之间,Session默认是不共享的,因为Cookie名称为JSESSIONID的Cookie根域是默认是没设置 的,访问不同的二级域名,其Cookie就重 ...

  6. .NET二级域名共享Session

    ASP.NET二级域名站点共享Session状态今天, 我要写的是如何在二级域名站点之间,主站点和二级域名站点之间共享Session.首先, Session要共享,站点之间SessionID必须要一致 ...

  7. 顶级域名和二级域名共享cookie及相互删除cookie

    在CSDN看到一个cookie设置domain时,如何删除的问题, 自己也只知道domain设置为顶级域名时可以被其他二级域名共享,但是如何删除还是有一点搞不清楚,所以特意测试了下cookie和dom ...

  8. Cookie 跨域解决方案(顶级域名和子级域名之间的Cookie共享、修改、删除)

    最近项目中刚好涉及到了主域名和子域名之间的共享和相互修改.删除,也就借此机会总结一下常用的几个场景,域名的话就拿顶级域名和二级域名为例,其他的场景都是类似. 一.设置COOKIE 1.顶级域名 顶级域 ...

  9. 多个域名共享同一台服务器80端口:纯IIS服务器篇

    虽然现在云服务器可以很弹性的收缩资源,提高利用率,不过仍会出现业务量不大的情况下,一台服务器资源给多个应用共享.而很多应用限制了web应用的端口号,比如微信公众号开发,只认80端口,如果多个公众号用多 ...

最新文章

  1. AI、区块链和机器人:技术会让未来的工作发生什变化?
  2. 竞争者无数的大数据赛道,这家创业公司靠什么获得众多资本青睐?
  3. huffman python_Python huffman包_程序模块 - PyPI - Python中文网
  4. ios 下拉放大 上拉缩小_为啥鞠婧祎发量这么多?截图放大十倍她的“发缝”,网友:真密集...
  5. 微软架构师谈编程语言发展
  6. la3401解码板_拆解SONY ST-V702收音头 更换调频收音板+频偏调整
  7. 02函数极限存在条件
  8. spark压缩和序列化相关
  9. 手机图片怎么免费转换成PDF格式?教程来了
  10. 微信小程序点击图片全屏展示,并可以翻下一张图
  11. 超越QQ Mail文件中转站---大文件上传设计思路和实践 原创 王泽宾
  12. cesium粒子特效
  13. [转帖]历史上真实的《勇敢的心》
  14. jira7.2安装、中文及破解
  15. facebook最全面中文介绍,让你更加了解facebook
  16. Python qrcode制作二维码
  17. Paddle入门实战系列(四):中文场景文字识别
  18. 怎么用计算机直接截图,电脑怎么快速截屏?分享电脑快速截屏的五种方法
  19. 20180828江苏实达迪美数据处理
  20. C++:找出一个整型数组中最大值。

热门文章

  1. Servlet WEB过滤器
  2. Mysql5.7的gtid主从半同步复制和组复制
  3. shell脚本重启tomcat
  4. 20个必会的JavaScript面试题
  5. Guava库学习:学习Collections(二)Lists
  6. cisco-ccna-第九章测试-work1-汉语
  7. wcf客户端动态嗅探服务实例
  8. 转载:linux环境下搭建discuz论坛
  9. SciTE for Ruby的配置
  10. 防水+四扬声器诺基亚X7细节