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代码:

<?phpsession_start();setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".Alixixi.com");$_SESSION['user_name']='hello';echo $_SESSION['user_name'];?>

域名二文件php代码:

<?phpsession_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代码:

<?phpini_set("session.cookie_domain",'Alixixi.com');//注:该参数必须在sesson_start()之上,否则将不会生效session_start();$_SESSION['user_name']='梁山良民';echo $_SESSION['user_name'];?>

域名二文件php代码:

<?phpini_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值将会出现问题的!

您可能感兴趣的文章

  • APACHE同一IP配置多个域名,Apache下同一个IP配置多个虚拟主机
  • smarty模板中使用php函数以及smarty模板中如何对一个变量使用多个函数
  • 如何查看同一服务器上挂有多少个网站
  • 大流量网站该如何实现优化服务器、静态化、数据库优化、负载均衡以实现高负载
  • mysql服务器主从数据库同步配置
  • CuteFTP连接ftp服务器时弹出“遇到无效的参数”错误的解决办法
  • 如何增强Linux和Unix服务器系统安全性
  • 总结MySQL数据库服务器逐渐变慢的原因和解决办法



郑重声明:本文版权包含图片归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们(delete@yzlfxy.com)修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
昵称:
匿名发表
   
验证码: