PHP实现同服务器多个二级域名共享 SESSion
现在很多分类信息网站都会分出很多个二级域名出来,比如:sh.ganji.com(上海赶集网), su.ganji.com(苏州赶集网)等等,像这种拥有多个二级域名的网站,该如何实现同步共享session呢,这里不讨论在多个服务器上的问题,仅仅分享一下在同一个服务器上面的多个二级域名网站如何共享session。
说这个问题之前,先来了解一下 PHP SESSION 的工作原理。在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() 打开 SESSION,这样就会产生客户端的唯一标识 SESSION ID(此 ID 可通过函数 session_id() 获取/设置)。SESSION ID 可以通过两种方式保留在客户端,使得请求不同的页面时,PHP 程序可以获知客户端的 SESSION ID;一种是将 SESSION ID 自动加入到 GET 的 URL 中,或者 POST 的表单中,默认情况下,变量名为 PHPSESSID;另一种是通过 COOKIE,将 SESSION ID 保存在 COOKIE 中,默认情况下,这个 COOKIE 的名字为 PHPSESSID。这里我们主要以 COOKIE 方式进行说明,因为应用比较广泛。 SESSION 的数据是保存在服务器端的文件或数据库中。默认情况下,php.ini 中设置的 SESSION 保存方式是 files(session.save_handler=files),即使用读写文件的方式保存 SESSION 数据,而 SESSION 文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSION ID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的 SESSION 数据了。如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path=”N;/save_path”,N 为分级的级数,save_path 为开始目录。当写入 SESSION 数据的时候,PHP 会获取到客户端的 SESSION_ID,然后根据这个 SESSION ID 到指定的 SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件。读取 SESSION 数据是也是类似的操作流程,对读出来的数据需要进行解序列化,生成相应的 SESSION 变量。
通过了解php session的工作原理,这里我们就可以有两种方法解决session共享的问题了。
(1)利用COOKIE存放session_id(); 域名一文件php代码:
<?php
session_start();
setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".Alixixi.com");
$_SESSION['user_name']='hello';
echo $_SESSION['user_name'];
?>
域名二文件php代码:
<?php
session_destroy();
session_id($_COOKIE['session_id']);
session_start();
echo $_SESSION['user_name'];
?>
(2)利用php.ini 的session.cookie_domain 备注:这里是用php代码实现不需要修改php.ini的配置文件;如果有需要你可以在php.ini里面修改配置文件(该情况下就不需要改段代码:ini_set("session.cookie_domain",'session.com');) 域名一文件php代码:
<?php
ini_set("session.cookie_domain",'Alixixi.com');//注:该参数必须在sesson_start()之上,否则将不会生效
session_start();
$_SESSION['user_name']='梁山良民';
echo $_SESSION['user_name'];
?>
域名二文件php代码:
<?php
ini_set("session.cookie_domain",'Alixixi.com');
session_start();
echo $_SESSION['user_name'];
?>
下面是两个需要注意的问题: 一:ini_set("session.cookie_domain",'session.com');必须放在session_start()之前; 二:在某些网站测试的时候必须得注意,或许你本地没有问题,但是在其他机器上或者服务器上有问题,那么你需要检查ini_set("session.cookie_domain",'session.com');这个中的session.com中必须与你的域名 进行真实匹配!不然你的部分session值将会出现问题的!
PHP实现同服务器多个二级域名共享 SESSion的更多相关文章
- asp.net基于StateServer的二级域名共享session
备注:亲自试验有效,如果网友有通过下面的教程未实现session共享的,欢迎留言说明你遇到的问题.必有回复. 最近为实现的二级域名共享session纠结好久.网上的很多实现的方法试了都不行,查了很久才 ...
- .NET二级域名共享Session
ASP.NET二级域名站点共享Session状态 今天, 我要写的是如何在二级域名站点之间,主站点和二级域名站点之间共享Session. 首先, Session要共享,站点之间SessionID必须要 ...
- Froms 认证 二级域名共享session登录凭证
1. 需要共享的web.config 里需要加添 <authentication mode="Forms"> <forms name="/> &l ...
- 顶级域名和二级域名共享cookie及相互删除cookie
在CSDN看到一个cookie设置domain时,如何删除的问题, 自己也只知道domain设置为顶级域名时可以被其他二级域名共享,但是如何删除还是有一点搞不清楚,所以特意测试了下cookie和dom ...
- TP、PHP同域不同子级域名共享Session、单点登录
TP.PHP同域不同子级域名共享Session.单点登录 目的: 为了部署同个域名下不同子级域名共享会话,从而实现单点登录的问题,一处登录,同域处处子系统即可以实现自动登录. PHP支持通过设置coo ...
- Thinkphp框架下(同服务器下)不同二级域名之间session互通共享设置
在Thinkphp框架下根目录打开index.php 在头部加入如下代码即可: //入口文件 define('DOMAIN','abc.com');//abc.com换成自己的跟域名 //以下两行是为 ...
- 设置二级域名共享一级域名Cookie和删除共享Cookie
设置共享Cookie: 二级域名要想共享一级域名的cookie,只需要设置cookie.Domain = ".一级域名.com"; 删除共享Cookie: HttpCook ...
- php实现多域名共享session会话
php会话机制参考:我的随笔 缘起 网站,通常会有多个服务器,多个子域名,每个节点运行着不同模块.有时为了整体体验,用户用同一个用户名.密码浏览整站,不用重复登录.这时候就需要多服务器共享sessio ...
- 黄聪:Wordpress二级域名共享用户cookie出现错误解决方案及WP的Cookie机制
在若干年以前,我刚开始折腾Wordpress没多久的时候,就自己摸索过 多个Wordpress网站共享一份数据表的实现方法 .这种看起来好像很高大上的类SSO功能,能够给用户在多个网站之间提供快速.无 ...
随机推荐
- [翻译]在gulp构建工具中使用PostCSS
前言 PostCSS已经在一段时间内迅速普及,如果你还不知道PostCSS或还没有使用它,我建议你看一下之前的一篇介绍文章<PostCSS简介>,其中介绍了使用PostCSS的基本方法,包 ...
- Github fork其他项目的分支与主干保持同步
Fork一个Repo Fork是一个复制的操作,当你Fork一个项目之后,你就有了在原项目的基础之上进行修改和扩展的权限. 通常情况下,Fork操作用于参与别人的项目(成为项目中的一员),或者以别人的 ...
- JMeter学习(十四)jmeter_断言使用
先说一下使用断言的目的:在request的返回层面增加一层判断机制.因为request成功了,并不代表结果一定正确.类似于QTP中的检查点检查点.断言的使用方法: step_1:在你选择的Sample ...
- JDK环境变量配置问题 - 原创
一台电脑上同时装有jdk1.7和jdk1.8,切换jdk时的报错问题 示例如下环境变量: JAVA_HOME C:\Program Files (x86)\Java\jdk1.7 CLAS ...
- JAVA中的数据存储(堆及堆栈)- 转载
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可 ...
- Logstash过滤器修改数据
数据修改(Mutate) filters/mutate 插件是 Logstash 另一个重要插件.它提供了丰富的基础类型数据处理能力.包括类型转换,字符串处理和字段处理等. 类型转换 类型转换是 fi ...
- throws和throw的用法例子以及检测和非检查异常
throws E1,E2,E3 只是告诉程序这个方法可能会抛出这些个异常,方法的调用者可能要处理这些异常.而这些异常E1,E2,E3可能是该函数体产生的. 而throw是明确之处这个地方要抛出这个异常 ...
- Dynamo论文介绍
http://catkang.github.io/2016/05/27/dynamo.html Dynamo是Amazon开发的分布式存储系统,本文是阅读Dynamo论文后的总结:Dynamo: Am ...
- codeforces 814B.An express train to reveries 解题报告
题目链接:http://codeforces.com/problemset/problem/814/B 题目意思:分别给定一个长度为 n 的不相同序列 a 和 b.这两个序列至少有 i 个位置(1 ≤ ...
- linux的一些操作
在终端输入cat /etc/issue 查看ubuntu的半磅不知道ubuntu特权用户root的密码时:Ubuntu在默认情况下是不启用root用户的,所以这对于一下对于linux命令不熟悉的用户在 ...