课程咨询 :15610069419 QQ:2720475033

保险

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

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

  • 最近青岛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高级开发工程师就业班

PHP高级开发工程师就业班

开班日期:9月28日

PHP高级开发工程师精品班

PHP高级开发工程师精品班

开班日期:9月28日

PHP高级开发工程师周末班

PHP高级开发工程师周末班

开班日期:9月28日

PHP高级开发工程师定制班

PHP高级开发工程师定制班

开班日期:9月28日

 扫一扫,关注一下! 青岛:市南区金坛路17号 济南:历下区趵突泉北路三联商社
济南:历下区山大路47号数码港大厦 潍坊:奎文区东风东街299号建行大厦
烟台:海港路25号阳光100城市广场 临沂:兰山区红旗路1号苏宁易购
淄博:张店区金晶大道68号华润大厦 济宁:市中区太白路10号苏宁生活广场
课程培训电话:15610069419 QQ:2720475033 全国服务监督电话:400-111-8989    服务邮箱 tousu@tedu.cn

2001-2017 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56