跨子域的$ _SESSION

时间:2012-02-19 12:09:28

标签: php session cookies

有没有人知道如何跨子域保持会话?

我可以使用两个不同的子域访问特定的cookie,但问题仍然存在......当我尝试将子域的$ _SESSION ['test']发送给另一个子域时,它不会显示在另一个子域中:

subdomain1.domain.com/trial.php

<?php
ini_set("session.cookie_domain", ".domain.com");  // allow access to this cookie from any subdomain
session_start();      // create cookie
$_SESSION['test'] = "TEST1";  // lets try to send "TEST1" in the other subdomain
?>

subdomain2.domain.com/trial.php

<?php
ini_set("session.cookie_domain", ".domain.com");  
session_start();       // cookie already set
print_r($_SESSION);    // $_SESSION array is empty
?>

感谢, milkael

1 个答案:

答案 0 :(得分:3)

更好地在数据库中存储会话,并将其作为cookie传递。 PHP在其setcookie()中有一个参数(域),可以为整个域(包括子域)提供cookie。

所以,只要您的域和子域访问同一个数据库(或者至少可以访问包含会话的数据库):

  • 在数据库中存储会话ID(会话ID对每个用户都应该是唯一的)
  • 将相同的会话ID存储在浏览器的cookie中(跨域可用)
  • 当用户访问您的另一个子域名时,只需将Cookie值与数据库中的值进行比较,您就会知道该人员是同一个人。