问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么把session统一到一个域

发布网友 发布时间:2023-11-20 08:35

我来回答

1个回答

热心网友 时间:2024-03-30 04:56

实现多域名下共用一个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
<iframe src=”"></iframe>
或者.js
<script type=”text/javascript” src=”"></script>
或者是一个img html元素
<img src=”" />
只要能调用某个地址,就行。
在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形式实现的。
?
<?phpclass mdSession{function mdSession(){}function set($urls){if (!is_array($urls)){$urls=array($urls);}foreach ($urls as $value){echo '<span style="position:absolute;visibility:hidden"><iframe src="'.$value.'?'.session_id().'"></iframe></span>';}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 :<?php ? include "mdSession.php";?session_start();$_SESSION['php']="yogurt8";mdSession::_set('http://www.b.com/ses_get.php');var_dump($_SESSION);?>?ses_get.php<?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 下还是不行
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
钢琴谱一小段有三行怎么弹?最上是高音,然后还是高音,最后是低音?我用来... 请问跨专业考研都需要哪些方面的准备啊? 2013109期福彩双色球开奖号码 vivoy3手机如何长截屏 男友贪污也是网上追逃犯我还可以和他在一起吗 网上追逃犯罪嫌疑人住家里算是窝藏或是包庇吗 ps3海贼无双普通版有下载卡的吗? 关于PS3版海贼王无双和北斗神拳无双 PS3现在海贼无双3.55破解能玩了吗 我看网上说有破解补丁 谁能给个地址... 现在网上下载得到PS3的海贼无双。铁拳6,。高达无双3等游戏吗 巴彦高勒汽车站到河套大市场有多远 天津瑞孚饲料怎么样29 龙游汽车北站到桥下菜市场有多远 导航一体机怎么连接手机为什么要用原配数据我? 直招士官进部队会对专业进行培训吗?培训多久? 建设工程资料有哪些?2 工程竣工资料包括哪些413 工程资料包括那些? 一个苹果平板跟一个华为平板,还有一个苹果手机能同时登同一个吗... 以O为圆心的同心圆(圆心相同,半径不同的圆称为同心圆),当半...19 怎么打好跆拳道实战66 颅骨骨折八年了,现在还能手术吗。现在年龄26 晚上跟一个异性聊天睡着后,为什么会梦到跟他在一起?1 兔子不小心喝了一口酸奶有事吗? 鸡西回大连蛤蜊岛沿途路线 兔子不小心吃了一口烟头有事吗? 文言文翻译 为学运用什么论证方法,论证了什么到理40 蜂蜜银耳茶饮料的配方怎么研制呢?3 谁在用GPS导航,你是用一体机导航还是PPC手机导航???3 一个手机号能注册几个? 有一颗门牙有裂纹,可以带牙套吗 2014年的十二生肖的琴棋书画分别代表什么生肖163 蜂蜜银耳茶饮料的配方怎么研制呢?3 跆拳道实战经验3 圆心相同,半径相等的两个圆是同心圆这句话对吗 等弧所对的圆心角一定相等吗??232 ...眼袋和黑眼圈. 这个说法对吗?有效吗?谢谢了,大神帮忙啊 兔子能吃山楂片吗人吃的(我家兔子不小心吃了一口&#12855...15 怎么用碗蒸米饭219 导航一体机怎么连接手机为什么要用原配数据我? 泰安到淄博水果市场有多远 12岁的孩子吃什么可以长个子47 吃了燕窝不小心吃了柚子没事吧1 难道你心已变求歌曲名 从圆心到圆上任意一点的距离都相等.______.(判断对错24 同园或等圆中,相等圆周角所对弦相等吗7 12岁的孩子吃什么可以长个子47 男孩18岁以后吃什么长个2 李东上个月计划用生活费800元,实际比计划还节省了5%,他上...100 生于1968年农历4月17日女性的命运1