当不允许编辑php.ini时,通过子域的PHP会话

时间:2018-12-28 11:50:03

标签: php ini

我的主机(一个)不允许我更改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

除了从一开始就在正确的子域上设置会话变量之外,是否有其他解决方法?

3 个答案:

答案 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

或: 如果您不想使用重定向,也可以创建带有指向子域链接的像素图像

要使这两种解决方案正常工作,您需要为每个子域分别设置会话。