Нестандартный механизм сессий и капча

С нестандартным механизмом сессий не работает капча, по крайней мере в лс 0.4.2. Для того что бы заработала нужно поправить 3 файла:
  • /classes/actions/ActionRegistration.class.php
  • /engine/lib/external/kcaptcha/index.php
  • /engine/modules/viewer/Viewer.class.php



в первом ищем строку:
if (!isset($_SESSION['captcha_keystring']) or $_SESSION['captcha_keystring']!=strtolower(getRequest('captcha'))) {

и меняем на:
if ( $this->Session_Get('captcha_keystring')!=strtolower(getRequest('captcha'))) {


в этом же файле ищем строку:
unset($_SESSION['captcha_keystring']);
и меняем на:
$this->Session_Drop('captcha_keystring');


Во втором файле нужно поменять практически все. Код который там должен быть выглядит так:
<?php
include('kcaptcha.php');
define('SYS_HACKER_CONSOLE',false);
set_include_path(get_include_path().PATH_SEPARATOR.dirname(dirname(dirname(dirname(dirname(__FILE__))))));
chdir(dirname(dirname(dirname(dirname(dirname(__FILE__))))));

// Получаем объект конфигурации
require_once("./config/loader.php");
require_once(Config::Get('path.root.engine')."/classes/Engine.class.php");


$engine = Engine::getInstance();
foreach ($_REQUEST as $key => $value) {
	if (preg_match("/^[\w\d]{5,40}$/",$value)) {
        $engine->Session_GetData();
		break;
	}
}
$captcha = new KCAPTCHA();
$engine->Session_Set('captcha_keystring',$captcha->getKeyString());
?>


Ну и в третьем файле находим код:
$this->Assign("_sPhpSessionName", session_name());
$this->Assign("_sPhpSessionId", session_id());
и меняем его на:
$this->Assign("_sPhpSessionName", Config::Get('sys.session.name'));
$this->Assign("_sPhpSessionId", $this->Session_GetId());


0.5 мельком глянул там такая же беда и исправляется так же.

4 комментария

avatar
С не стандартным механизмом сессий
Простите, это как?
avatar
В конфиге есть такая строчка :
$config['sys']['session']['standart'] = true;                             // Использовать или нет стандартный механизм сессий


так вот когда false используется мемкеш как хранилище.
avatar
лучше не менять на false, т.к. это скорее экспериментальный режим, к тому же который не тестировался последние два года
avatar
Никаких багов кроме того что я описал выше не заметил. В целом по всему коду только в нескольких местах пользуется $_SESSION вместо $this->Session_blabla.

Ну и конечно стоит использовать session_set_save_handler. Но вчера в 4ре утра было уже не до красивостей :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.