青岛PHP培训
青岛达内职业培训学校

18300268127

热门课程

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

  • 时间:2016-08-08
  • 发布:青岛php培训
  • 来源:青岛php培训

最近青岛php培训小编发现在很多分类信息网站都会分出很多个二级域名出来,比如: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代码:

查看代码打印1

2session_start();

3setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".phpernote.com");

4$_SESSION['user_name']='hello';

5echo $_SESSION['user_name'];

6?>

域名二文件php代码:

查看代码打印1

2session_destroy();

3session_id($_COOKIE['session_id']);

4session_start();

5echo $_SESSION['user_name'];

6?>

(2)利用php.ini 的session.cookie_domain

备注:这里是用php代码实现不需要修改php.ini的配置文件;如果有需要你可以在php.ini里面修改配置文件(该情况下就不需要改段代码:ini_set("session.cookie_domain",'session.com');)

域名一文件php代码:

查看代码打印1

2ini_set("session.cookie_domain",'phpernote.com');//注:该参数必须在sesson_start()之上,否则将不会生效

3session_start();

4$_SESSION['user_name']='梁山良民';

5echo $_SESSION['user_name'];

6?>

域名二文件php代码:

查看代码打印1

2ini_set("session.cookie_domain",'phpernote.com');

3session_start();

4echo $_SESSION['user_name'];

5?>

下面是两个需要注意的问题:

一:ini_set("session.cookie_domain",'session.com');必须放在session_start()之前;

二:在某些网站测试的时候必须得注意,或许你本地没有问题,但是在其他机器上或者服务器上有问题,那么你需要检查 ini_set("session.cookie_domain",'session.com');这个中的session.com中必须与你的域名 进行真实匹配!不然你的部分session值将会出现问题的!

上一篇:青岛php培训谈如何学好php
下一篇:青岛php培训之子类中调用父类变量的方法

马上预约七天免费体验课

姓名:

电话:

青岛PHP培训:服务端渲染

如何在Linux环境下安装PHP

学习PHP的正确姿势

PHP基础问题解惑

选择城市和中心
贵州省

广西省

海南省

达内教育

有位老师想和您聊一聊