2010-04-29 113 views
2

我试图在两个子域之间共享会话变量的内容,但由于某些原因,它不起作用。

sessionid在两个子域上都完全相同,但变量不可用。

我可以通过Cookie实现这一点,这是工作,但宁愿使用会话中的值。

下面是我如何设置域的会话:

感谢, 斯科特

UPDATE 对不起应该说,我已经使用了以下内容:

ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100)); 

if(session_id ==''){session_start();} 

回答

3

您在寻找此功能:session_set_cookie_params()。 假设你有两个域:

  1. site1.example.com
  2. site2.example.com

为了这两个域之间共享会话数据,session_start()之前拨打以下functiontion:

session_set_cookie_params(0, '/', '.example.com');

(编辑:事实上,我忘记在示例代码的点阵)

+1

这不起作用 – 2010-04-29 12:03:04

+0

@Col。 Shrapnel - 你能否扩展你的评论?我不确定你是否在说我试图做的事情不会奏效,或者Rodin提供的代码是不正确的。 – scott 2010-04-29 12:52:34

+0

@scott请参阅http://php.net/setcookie手册以了解正确的域设置。注意点数 – 2010-04-29 13:18:32

-1

SessionID的正是在 两个子域(..)

你确定会话ID的(没有名字)是一样一样的吗?

2年前我需要类似的东西,但我需要它在完全不同的虚拟主机上工作(例如,example.com和something.else.net),所以我编写了一个小脚本,以确保用户获得相同的session_id在不同的虚拟主机上。源代码可在http://www.misc.lv/_downloads_file.php?id=18处获得,但第58行有小错误 - strpos()的参数应该交换(我懒得修复它并上传固定的脚本)。

基本要求/步骤是:

  1. 所有页面应该是在同一台服务器上,因为他们需要的会话变​​量一个共同的“存储”;
  2. 必须有一个“主”主机;许多“额外”主机没有限制;
  3. 如果当前打开的页面位于“主要主机”上(并且它不是session_id的请求),则不需要执行任何“特殊”操作;
  4. 如果页面不在“主要主机”上并且存在活动会话,则不需要执行任何“特殊”操作,因为session_id可能已经被共享;
  5. 如果页面不在“主要主机”上并且没有活动会话,则从“主要主机”请求session_id。
+0

是的两个sessionid值完全相同。 这两个子域位于同一台服务器上。 – scott 2010-04-29 13:34:26