обмен сессией через папку - PullRequest
0 голосов
/ 14 февраля 2012

У меня проблемы с разделением сеанса между папками в CakePHP, и я нашел решение здесь: Доступ к сеансу cakephp (аутентификация) извне cakephp

Это дает мне пустую сессию вне папки CakePHP

<?php
session_name('CAKEPHP');
session_start();
print_r($_SESSION);

?>

Благодарю вас.

Ответы [ 7 ]

1 голос
/ 23 февраля 2012

Вы устанавливаете название сеанса с помощью session_name('CAKEPHP') Это может быть не то, что использует торт. Попробуйте удалить эту строку, и PHP будет использовать значение по умолчанию session_name('PHPSESSID').

Редактировать Вы можете проверить Использование сеансов Cake вне Cake

0 голосов
/ 29 февраля 2012

Во-первых, пожалуйста, проверьте, что ваши сеансы работают нормально с phpinfo()

, если все в порядке, попробуйте

session_set_cookie_params(0);//before session_start function
session_start();

Также измените сеанс на вашем сервере, чтобы точно узнать, что создает проблему.

Если вы используете общий хостинг, вы можете создать отдельный php.ini для установки значений

[PHP]
session.cookie_domain = ".domain.com";
session.save_path = "/home/users/web/foldr1/domain.com/sessions/";

Надеюсь, что таким образом вам будет легко найти основную причину.

0 голосов
/ 29 февраля 2012

Я узнаю твои симптомы. Это особенно неприятная проблема, которая заставила меня много разыскивать, когда я испытал это, но я прибил это в конце, и я рад поделиться тем, что, как я уверен, будет ответом кому-то еще.

Причиной проблемы был параметр suhosin.session.cryptdocroot. Проверьте ваш веб-сервер с phpinfo.php и посмотрите, включен ли Suhosin. Suhosin создает переменные сеанса в DocRoot в соответствии с именем субдомена. С двумя или более поддоменами переменные сеанса не могут видеть друг друга и значение друг друга именно потому, что они хранятся в отдельных подпапках. Безумный, да. Однако для этого есть достаточно простое решение:

Просто добавьте эти две строки в файл php.ini.

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

и вуаля! Переменные сеанса в разных доменах теперь работают как надо.

0 голосов
/ 28 февраля 2012

Отметьте это, это может помочь вам

// для совместного использования между папками используйте сеанс save_path

session_save_path('/home/www/sessions');
session_start();
$_SESSION["CAKE_PHP"] = "my_name";
0 голосов
/ 24 февраля 2012

В процессе миграции большого приложения с контроллера CakePHP на контроллер Yii с помощью контроллера мы столкнулись с одной и той же потребностью, и я считаю, что все, чего вам не хватает, это установить правильный session.save_path, который (по крайней мере, в моем случае) не былпросто / tmp /, но вместо этого% CAKE_PATH% / tmp / сессий /.

ini_set('session.save_path', TMP . 'sessions');

этой строки и всех других настроек конфигурации сеанса cakephp можно найти в cake / libs / cake_session.php (для 1.3.10 минимум)Оттуда достаточно указать то же имя и выполнить session_start ().

Cheers, shean

0 голосов
/ 23 февраля 2012

Вы используете php сессии? Если вы используете сеансы БД, вы можете просто выполнить запрос mysql для сеанса и поместить его в $ _SESSION

0 голосов
/ 23 февраля 2012

Как вы называете сеанс?$ _SESSION ['CAKEPHP'] также будет возвращаться пустым, если он также помещен в приложение CakePHP.Лучший способ убедиться, что вы можете прочитать его, - это узнать, что вы хотите прочитать, и правильно назвать его в приложении CakePHP, которое вы пишете.

$ this-> Session-> write ('Name.item1', 'value1');$ this-> Session-> write ('Name.item2', 'value2');$ this-> Session-> write ('Name.item3', 'value3');...

Затем вы можете получить к нему доступ через:

$_SESSION['Name']

и он вернется

array (
  'item1' => 'value1',
  'item2' => 'value2',
  'item3' => 'value3',
)

В торте вы можете получить к нему доступ как1012 *

и он вернется

value1

Так что простой вызов $_SESSION['CAKEPHP'] не сработает, если вы не пишете CAKEPHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...