php session域名共享,实现多域名下共用一个SESSION
要实现多域名共享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元素
只要能调用某个地址,就行。
在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相关推荐
- php支持二级域名共享,PHP二级域名session共享方案
一般来讲网站都会有主站和子站,比如域名是linuxidc.com,那么一般来讲linuxidc.com和www.linuxidc.com就会是主站,而像bbs.linu 一般来讲网站都会有主站和子站, ...
- memcached实现多个tomcat共享一个session
好工具-站长资讯.经验.工具分享平台 首页 互联网 网站运营 站长工具 网络编程 当前位置: 好工具 >> 网络编程 >> .Net编程 作者:dylinshi126 | ...
- PHP实现同服务器多个二级域名共享 SESSION
现在很多分类信息网站都会分出很多个二级域名出来,比如:sh.ganji.com(上海赶集网), su.ganji.com(苏州赶集网)等等,像这种拥有多个二级域名的网站,该如何实现同步共享sessio ...
- TP、PHP同域不同子级域名共享Session、单点登录
TP.PHP同域不同子级域名共享Session.单点登录 目的: 为了部署同个域名下不同子级域名共享会话,从而实现单点登录的问题,一处登录,同域处处子系统即可以实现自动登录. PHP支持通过设置coo ...
- java多域名共享session_同一服务器不同域名session共享
Tomcat下,不同的二级域名之间或根域与子域之间,Session默认是不共享的,因为Cookie名称为JSESSIONID的Cookie根域是默认是没设置 的,访问不同的二级域名,其Cookie就重 ...
- .NET二级域名共享Session
ASP.NET二级域名站点共享Session状态今天, 我要写的是如何在二级域名站点之间,主站点和二级域名站点之间共享Session.首先, Session要共享,站点之间SessionID必须要一致 ...
- 顶级域名和二级域名共享cookie及相互删除cookie
在CSDN看到一个cookie设置domain时,如何删除的问题, 自己也只知道domain设置为顶级域名时可以被其他二级域名共享,但是如何删除还是有一点搞不清楚,所以特意测试了下cookie和dom ...
- Cookie 跨域解决方案(顶级域名和子级域名之间的Cookie共享、修改、删除)
最近项目中刚好涉及到了主域名和子域名之间的共享和相互修改.删除,也就借此机会总结一下常用的几个场景,域名的话就拿顶级域名和二级域名为例,其他的场景都是类似. 一.设置COOKIE 1.顶级域名 顶级域 ...
- 多个域名共享同一台服务器80端口:纯IIS服务器篇
虽然现在云服务器可以很弹性的收缩资源,提高利用率,不过仍会出现业务量不大的情况下,一台服务器资源给多个应用共享.而很多应用限制了web应用的端口号,比如微信公众号开发,只认80端口,如果多个公众号用多 ...
最新文章
- AI、区块链和机器人:技术会让未来的工作发生什变化?
- 竞争者无数的大数据赛道,这家创业公司靠什么获得众多资本青睐?
- huffman python_Python huffman包_程序模块 - PyPI - Python中文网
- ios 下拉放大 上拉缩小_为啥鞠婧祎发量这么多?截图放大十倍她的“发缝”,网友:真密集...
- 微软架构师谈编程语言发展
- la3401解码板_拆解SONY ST-V702收音头 更换调频收音板+频偏调整
- 02函数极限存在条件
- spark压缩和序列化相关
- 手机图片怎么免费转换成PDF格式?教程来了
- 微信小程序点击图片全屏展示,并可以翻下一张图
- 超越QQ Mail文件中转站---大文件上传设计思路和实践 原创 王泽宾
- cesium粒子特效
- [转帖]历史上真实的《勇敢的心》
- jira7.2安装、中文及破解
- facebook最全面中文介绍,让你更加了解facebook
- Python qrcode制作二维码
- Paddle入门实战系列(四):中文场景文字识别
- 怎么用计算机直接截图,电脑怎么快速截屏?分享电脑快速截屏的五种方法
- 20180828江苏实达迪美数据处理
- C++:找出一个整型数组中最大值。