Как перенести основной домен сеанса в поддомену в php [duplicate]

Невозможно разбить строковый литерал на несколько строк в файлах CMakeLists.txt или в сценариях CMake. Если вы включаете новую строку в строку, в самой строке будет буквальная новая строка.

# Don't do this, it won't work, MYPROJ_VERSION will contain newline characters:
set(MYPROJ_VERSION "${VERSION_MAJOR}.
  ${VERSION_MINOR}.${VERSION_PATCH}-
  ${VERSION_EXTRA}")

Однако CMake использует пробелы для разделения аргументов, поэтому вы можете изменить пространство, разделяющее аргумент, на (/ g1)

Вы можете перефразировать эту более длинную строку:

set(MYPROJ_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_EXTRA}")

в качестве этих двух более коротких строк:

set(MYPROJ_VERSION
  "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_EXTRA}")

Они полностью эквивалентны.

64
задан hakre 15 June 2012 в 19:16
поделиться

9 ответов

Попробуйте:

session_start(); 

$sessionId =  session_id();

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

$sessionId =  $_GET['id'];

session_start($sessionId); 

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

0
ответ дан abrar 28 August 2018 в 10:19
поделиться

Другой вариант, который работал для меня: это принудительное имя сеанса:

session_name("myWebsite");
session_start(); 
3
ответ дан benka 28 August 2018 в 10:19
поделиться

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

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

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

4
ответ дан joeldixon66 28 August 2018 в 10:19
поделиться

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

 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's cookie*/
 setcookie( "mysession", "",1,"/" );
 setcookie( "PHPSESSID", "",1,"/" );

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

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

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

5
ответ дан karthikeyan ganesan 28 August 2018 в 10:19
поделиться

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

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

session.cookie_domain = ".example.com"

Или в свой .htaccess:

php_value session.cookie_domain .example.com

Или как первое в вашем скрипте:

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

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

php_value[session.cookie_domain] = .example.com
79
ответ дан Lidor 28 August 2018 в 10:19
поделиться
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()

-3
ответ дан Michael Irigoyen 28 August 2018 в 10:19
поделиться

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

0
ответ дан Mike 28 August 2018 в 10:19
поделиться
        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');

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

11
ответ дан sucitivel 28 August 2018 в 10:19
поделиться

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

  1. уничтожает все кеши и файлы cookie вашего браузера
  2. в ваших xxx.example.com и yyy.example.com , ваши php-файлы должны начинаться следующим образом.
    ini_set('session.cookie_domain', '.example.com' ); session_start();
    
2
ответ дан techraf 28 August 2018 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: