您好我在子域上访问会话时遇到问题。会话将使用以下代码在domain.com上设置:
<?php
ob_start();
ini_set("session.cookie_domain",".domain.com");
session_start();
header ("Content-Type: text/html; charset=utf-8");
....
因此,在域前添加一个点应该甚至可以为子域设置会话。
我看了一下我发现这条线的phpinfo:
session.cookie_domain no value no value
因为主机设置我没有机会编辑php.ini文件。所以我不得不在上面的所有文件中添加ini_set行。
问题如下:当我打电话给domain.com时,会设置一个会话。我建立了一个测试页面,可以轻松回显会话和cookie。正如我所说,会话将在domain.com上设置,当我将调用domain.com/testfile.php时,它将正确显示。但是当我打电话给www.domain.com/testfile.php时,只会显示cookie但不会显示会话,这是空的。还在testfile.php上添加了ini_set行。
所以我不知道为什么这不起作用?我也删除了缓存和浏览器历史记录几次,但没有改变任何东西。我也试过不同的浏览器。
如果有人可以给我提示,我真的很感激。
非常感谢。
答案 0 :(得分:0)
你必须先开始会话。然后它会工作
<?php
session_start();
ob_start();
ini_set("session.cookie_domain",".domain.com");
header ("Content-Type: text/html; charset=utf-8");
....
答案 1 :(得分:0)
您可以尝试以下选项:
session.cookie_domain = ".example.com"
在.htaccess中:
php_value session.cookie_domain .example.com
作为脚本中的第一件事:
ini_set('session.cookie_domain', '.example.com' );
或
session_set_cookie_params(0, '/', 'example.com', false, false);
或者
if(isset($_COOKIE['session_id']))
session_id($_COOKIE['session_id']);
Zend_Session::start(); //or session_start();
if(!isset($_COOKIE['session_id']))
setcookie('session_id', session_id(), 0, '/', '.yourdomain.com');