CMS Made Simple: восстановление сеанса между просмотрами страниц - PullRequest
3 голосов
/ 15 июля 2011

У меня есть форма в шаблоне, которая размещена в PHP-скрипте. Этот скрипт устанавливает некоторые переменные в массиве $ _SESSION, а затем перенаправляет обратно на ту же страницу, используя стандарт:

header("Location: index.php?page=enquiry-form");

Проблема в том, что всякий раз, когда страница загружается после перенаправления, сеанс содержит только следующие три переменные:

  • cmsuserkey
  • cms_admin_user_id
  • cms_admin_username

... все мои исчезли.

  • Я звоню session_start (); в моем php скрипте
  • Я установил опцию конфигурации: $ config ['use_smarty_php_tags'] = true;

Пользователь не должен входить в систему, чтобы использовать форму (фактически сайт вообще не использует логины).

Кто-нибудь может подсказать, что я не делаю / делаю неправильно?

Спасибо, Рич

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Однажды у меня была такая же проблема, и я исправил ее с помощью addin exit () после перенаправления для сохранения сеанса:

 header("Location: index.php?page=enquiry-form");
 exit();
1 голос
/ 04 января 2013

У меня была похожая проблема (хотя я хотел использовать данные из сеанса CMS Made Simple в другом php-файле). Для меня причина была следующая (как указано в моем комментарии к вопросу):

CMS Made Simple (CMS отныне) создает собственное имя сеанса. Это означает, что когда вы запускаете session_start () в отдельном php-файле, у него не будет того же имени сеанса. Следовательно, php-файл не сможет получить доступ к данным сеанса CMS, а CMS не сможет получить доступ к данным сеанса php-файла.

Решение логически вытекает из причины, вам нужно, чтобы они оба использовали одно и то же имя сеанса. CMS устанавливает имя сеанса в include.php, которое должно находиться в корневой папке приложения.

$dirname = dirname(__FILE__);
...

$session_key = substr(md5($dirname), 0, 8);

#Setup session with different id and start it
@session_name('CMSSESSID' . $session_key);

Итак, в вашем php-файле вам нужно будет сделать следующее ( до вызова session_start();):

//Substitute the string $dirname for the result of __FILE__ in **include.php**!!!
$dirname = '/data/web/somefolder/someotherfolder/'
$session_key = substr(md5($dirname), 0, 8);
@session_name('CMSSESSID' . $session_key);
//Now you can call session_start();

Это позволяет вашему php-файлу получать доступ к сеансу CMS. Если вы используете какие-либо плагины, которые помещают важные данные в сеанс, вы должны быть осторожны, чтобы не стереть эти данные.

ПРИМЕЧАНИЕ. Я использую CMS версии 1.8.2, это решение может не работать, если вы используете другую версию.

...