PHP-сессии через поддомены, когда не разрешено редактировать php.ini - PullRequest
0 голосов
/ 28 декабря 2018

Мой хост (один) не позволяет мне изменить файл 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 путь к домену для файла cookie PHPSESSID по-прежнему example.com, а не .example.com

Существует ли какой-либо обходной путь, кроме установки переменных сеанса на правильный поддомен с самого начала?

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Параметры cookie сеанса также можно установить с помощью session_set_cookie_params () .Домен является третьим аргументом.

0 голосов
/ 28 декабря 2018

Это не лучшее решение!

Что касается вашей ситуации, и если вы не можете установить ее с помощью .htaccess, вы можете перенаправить на ваш поддомен (ы), создать сеанси перенаправить обратно на URL, где вы хотите быть,

EX: example.com -> любое действие -> перейти на sub1.example.com -> создать сеанс -> перейти на sub2.example.com -> создать сеанс -> ... -> перейти на example.com

Или: Вы также можете создать пиксельное изображение со ссылками на свои субдомены, если вы не хотите использовать перенаправление

ДляЭто два решения для работы, вам нужно установить сеансы отдельно для каждого субдомена.

0 голосов
/ 28 декабря 2018

Вы можете установить переменную ini следующим образом: session_start ()

ini_set('session.cookie_domain', '.example.com' );

или задать этот вопрос в файле htaccess, например:

php_value session.cookie_domain .example.com

и из этого ответа :

    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();

для получения дополнительной информации см. Этот вопрос

...