我的主机(一个)不允许我更改php.ini文件,也找不到它(我可能甚至没有读取权限)。当我尝试使会话变量跨子域访问时,由于会话cookie仅针对主域(example.com
)设置,因此无法进行。我希望将其设置为.example.com
我试图将php ini文件设置为允许此操作。
ini_set('session.cookie_domain', '.example.com');
那没有用,因为不允许我运行ini_set()
函数。我也尝试查找php.ini文件,但在我的FTP客户端中找不到它。使用phpinfo()
使我感到困惑,它位于/etc/php
中,但我无权访问该目录。
我希望这可以工作,但显然不能。在Firefox中检查开发人员控制台,PHPSESSID
cookie的域路径仍然是example.com
而不是.example.com
除了从一开始就在正确的子域上设置会话变量之外,是否有其他解决方法?
答案 0 :(得分:1)
会话cookie参数也可以使用session_set_cookie_params()进行设置。域是第三个参数。
答案 1 :(得分:0)
您可以在 session_start()
之前设置ini变量ini_set('session.cookie_domain', '.example.com' );
或者对于这个问题,您可以在htaccess文件中设置如下:
php_value session.cookie_domain .example.com
并从此answer:
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');
最后,如果任何一种方法都不起作用,则可以更改 session_name
session_name('example_name');
然后使用以下代码进入php页面
session_set_cookie_params(0,"/",".example.com",FALSE,FALSE);
setcookie(session_name(), session_id(),0,"/","example.com");
session_start();
有关更多信息,请参见此question
答案 2 :(得分:0)
这不是最佳解决方案!
关于您的情况,如果您无法使用.htaccess进行设置,则可以重定向到您的子域,创建会话,然后重定向回您想要的URL,
EX: example.com->任何操作->转到sub1.example.com->创建会话->转到sub2.example.com->创建会话-> ...->转到example.com
或: 如果您不想使用重定向,也可以创建带有指向子域链接的像素图像
要使这两种解决方案正常工作,您需要为每个子域分别设置会话。