Подтвердить что ты не робот

Разрешить сеансам php переносить на поддомены

Я использую php-сессии (а не файлы cookie, за исключением cookie файла сеанса) для всех пользовательских данных, и когда пользователь переходит в свой профиль user.mydomain.com, они немедленно "выходят из системы", а затем удаляют субдомен.

Есть ли способ принять сеансы из всех доменов, пока его *.mydomain.com

4b9b3361

Ответ 1

Вот 4 варианта.

Поместите это в свой php.ini:

session.cookie_domain = ".example.com"

Или в вашем .htaccess:

php_value session.cookie_domain .example.com

Или как первое, что в вашем script:

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

Или в конфигурации пула php-fpm для вашего сайта:

php_value[session.cookie_domain] = .example.com

Ответ 2

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

безопасность будет проклята, если вы так расстроены неполными или плохими ответами, как я, это ваш спаситель. Он просто работает.

Ответ 3

изменить имя сеанса в верхней части файла основных функций как

 session_name('mysession');

затем используйте следующий код на странице php

  session_set_cookie_params(0,"/",".example.com",FALSE,FALSE);
  setcookie(session_name(), session_id(),0,"/","example.com");
  session_start();

наконец, измените имя сеанса по умолчанию для поддомена и удалите файл cookie по умолчанию в файле основных функций субдомена как:

 /*default session name*/
 session_name("mysession");
 /*remove the PHPSESSID and default session name from subdomain cookie*/
 setcookie( "mysession", "",1,"/" );
 setcookie( "PHPSESSID", "",1,"/" );

если вы продолжаете использовать свое имя файла cookie как PHPSESSID, просто удалите все функции с помощью

 "mysession" string like session_name('mysession'), setcookie( "mysession", "",1,"/" );

затем проверьте свой браузер на наличие файлов cookie, просто удалите все куки домена и поддомена и повторите процесс.

Ответ 4

Я знаю, что это довольно старый, но для дальнейшего расширения по предложению @CTT - мне нужно было добавить файл php.ini в каждый подкаталог (который будет выполнять PHP-код и требует сеанса) моего поддомена с помощью следующий текст:

suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off

Я надеюсь, что это поможет (мне потребовались годы, чтобы понять это).

Ответ 5

Другой вариант, который работал у меня: заключается в том, чтобы вызывать имя сеанса:

session_name("myWebsite");
session_start(); 

Ответ 6

да. ini_set работает. но не забудьте уничтожить все кеши и файлы cookie браузера, чтобы увидеть, как он работает.

  • уничтожить все кеши и файлы cookie вашего браузера.
  • в ваших xxx.example.com и yyy.example.com, ваши php файлы должны начинаться следующим образом.

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

Ответ 7

У меня была эта проблема, и оказалось, что я использую разные файлы php.ini для двух разных поддоменов. Эти ini файлы указали разные переменные session.save_path. По очевидным причинам это должно быть одинаковым для всех поддоменов, которым необходимо обмениваться сеансами.

Ответ 8

Попробуй это:

session_start(); 

$sessionId =  session_id();

зарегистрировал пользователя. Когда пользователь переключится на другой субдомен, он отправит идентификатор сеанса в URL-адрес, подобный этому user.mydomain.com/?id=$sessionId

$sessionId =  $_GET['id'];

session_start($sessionId); 

Теперь пользователь получит все значения сеанса и останется в системе.

Ответ 9

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

Это хорошее решение, но вы не можете использовать его во всех ситуациях. Например, это не сработает, если вы не можете полагаться на несеансные файлы cookie.

Это действительно ДОЛЖНО работать, если вы используете его правильно.

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

Например, вам нужно поставить его перед session_start(), а также во все файлы, вызывающие session_start()