Нестандартный механизм сессий и капча
С нестандартным механизмом сессий не работает капча, по крайней мере в лс 0.4.2. Для того что бы заработала нужно поправить 3 файла:
в первом ищем строку:
и меняем на:
в этом же файле ищем строку:
Во втором файле нужно поменять практически все. Код который там должен быть выглядит так:
Ну и в третьем файле находим код:
0.5 мельком глянул там такая же беда и исправляется так же.
- /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 комментария
так вот когда false используется мемкеш как хранилище.
Ну и конечно стоит использовать session_set_save_handler. Но вчера в 4ре утра было уже не до красивостей :)