Не могу найти указанный ключ формы (action).
Возникает такая вот ошибка, появилась она недавно и на многих сайтах сразу примерно с месяц назад (заметил только сейчас, клиенты пожаловались что форма не работает). Для простоты пока ищу решение проблемы только на 1 сайте. Форма отправляться в Хроме, в остальных не работает.
Может это как-то связано с этим?
Вызов снипета некешируемым решило мою проблему.
Может это как-то связано с этим?
С 18 мая 2016 года администрацией mail.ru была включена строгая политика DMARC для всех почтовых ящиков в доменах почтового сервиса mail.ru, таких как *@(mail.ru/list.ru/inbox.ru/bk.ru/mail.ua), о чем предварительно сообщалось в пресс-релизе компании mail.ru:UPD
corp.mail.ru/ru/press/releases/9593/
По этой причине сообщения с заголовками From (От кого) и указанием почтового ящика *@mail.ru, отправляемые не с почтового сервера mail.ru, к примеру, с использованием скриптов Вашего сайта, сразу отклоняются использующими проверку DMARC-политики серверами получателей и не могут быть доставлены.
Например, проверка DMARC производится на таких почтовых сервисах, как yandex.ru, mail.ru, gmail.com, yahoo.com и других.
Для решения вопроса доставки писем Вам следует отказаться от указывания почтовых ящиков компании mail.ru в поле From (От кого) в отправляемых Вами письмах или отправлять такие письма только с почтового сервера компании mail.ru.
Вызов снипета некешируемым решило мою проблему.
Комментарии: 37
Поставь в настройках путь куки /
И очисти таблицу сессий
И очисти таблицу сессий
И очисти таблицу сессийне помогло
Поставь в настройках путь куки /поставил session_cookie_path /
после этого даже в хроме перестало работать
поддерживаю, у самого та же проблема…
Такая же ерунда на нескольких сайтах. Кто-нибудь решил эту проблему?
похоже, настройки хостинга. но какие — хз
А хостинг не таймвеб?
нет
Единственное что заметил- когда кэш почищу, ошибка на некоторое время исчезает.
Та же проблема Как отключить эту проверку ключа? Или это нарушит безопасность? Устанавливал AjaxForm после регистрациии с ключом от modstore.pro
Аналогично!
У меня форма входа, где логином является почта. Сегодня у одного из пользователей никак не получается войти на сайт. — («не могу найти указанный ключ...»).
У пользователя Хром. Пробовал войти сам под этим пользователем — всё хорошо и в хроме и в опере.
Логин ...@mail.ru. Неужели действительно как-то связано?
У меня форма входа, где логином является почта. Сегодня у одного из пользователей никак не получается войти на сайт. — («не могу найти указанный ключ...»).
У пользователя Хром. Пробовал войти сам под этим пользователем — всё хорошо и в хроме и в опере.
Логин ...@mail.ru. Неужели действительно как-то связано?
вообщем главная сейчас проблема, что не могу воспроизвести эту ошибку ;( ибо у меня всё гуд, а пользователь бедолага — без доступа. Куда копать?
Спасибо.
Спасибо.
попробуй разлогиниться с админа и отправить форму
Хостинг от modhost.pro, та же проблема с AjaxForm + собственный сниппет который добавляет страницу + регистрирует пользователя, хотя до этого всё работало правильно.
Причём у меня не предусмотрена отправка письма (хотя поле email присутствует).
Даже пустая незаполненая форма вызывает ту же самую ошибку, вместо стандартной проверки заполненности всех полей.
Кто-нибудь нашел причину проблемы?
Причём у меня не предусмотрена отправка письма (хотя поле email присутствует).
Даже пустая незаполненая форма вызывает ту же самую ошибку, вместо стандартной проверки заполненности всех полей.
Кто-нибудь нашел причину проблемы?
Интересно, что эта ошибка у меня появляется только в Chrome 49.0.2623.112 m + XP (старая версия хрома для windows xp), а в Linux Ubuntu + Firefox всё работает исправно!
Может это в старых версиях хрома такое? (не было ещё возможности проверить на новых)…
Может это в старых версиях хрома такое? (не было ещё возможности проверить на новых)…
У меня и в опере такая проблема, к сожалению(
Попробуйте у ресурса, на котором происходит такая фигня, убрать галочку «Кешируемый»
Помогает, но ведь это не решение проблемы.
Я, по-моему, понял как баг проявляется:
1) чистим кэш;
2) завершаем все сеансы;
3) заходим на сайт, например с хрома, CTRL+F5 (на всякий случай);
4) отправляем форму — все нормально;
5) заходим на сайт с другого браузера, CTRL+F5, отправляем форму — выдает ошибку.
Если в 3 пункте заменить хром на другой браузер — форма будет работать только в нем, а в других нет.
Проблема в сессиях?
Кто сможет разобраться и пофиксить? Даже денег заплачу.
Я, по-моему, понял как баг проявляется:
1) чистим кэш;
2) завершаем все сеансы;
3) заходим на сайт, например с хрома, CTRL+F5 (на всякий случай);
4) отправляем форму — все нормально;
5) заходим на сайт с другого браузера, CTRL+F5, отправляем форму — выдает ошибку.
Если в 3 пункте заменить хром на другой браузер — форма будет работать только в нем, а в других нет.
Проблема в сессиях?
Кто сможет разобраться и пофиксить? Даже денег заплачу.
AjaxForm всегда должен вызываться некэшированным.
Похоже в этом и была проблема, спасибо. Подумать только… аж стыдно.
А не планируется в новых версиях ajaxform сделать возможность работы с кэшируемыми ресурсами? Есть плагины, которые замечательно кешируют страницы в modx, увеличивая в разы скорость работы (например, xfpc), но из-за ajaxForm приходится либо от них отказываться, либо свои обработчики писать.
Василий Наумкин, куда копать с этой проблемой?
Кто ни будь решил данную проблему? такое же появилось после обновления ревы до 2.5.2
Хостинги: таймвеб, бигет
После обновления:
У меня было такое, когда я в ручную вызвал инициализацию:
— В некоторых случаях, в ручную прописывал для форм action="[[*uri]]"
— Была проблема на рег.ру, там нихера не хотел работать и не заработал.
— А также я всегда в .htaccess разкоментироваю php_flag register_globals Off
Ну и после обновления надо чистить кеш :)
После обновления:
У меня было такое, когда я в ручную вызвал инициализацию:
<script type="text/javascript">AjaxForm.initialize({"assetsUrl":"\/assets\/components\/ajaxform\/","actionUrl":"\/assets\/components\/ajaxform\/action.php","closeMessage":"\u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435","formSelector":"form.ajax_form","pageId":687});</script>
Выводилось две ошибки после обновления. Соответственно удалил ручной вызов,— В некоторых случаях, в ручную прописывал для форм action="[[*uri]]"
— Была проблема на рег.ру, там нихера не хотел работать и не заработал.
— А также я всегда в .htaccess разкоментироваю php_flag register_globals Off
Ну и после обновления надо чистить кеш :)
Была проблема «Не могу найти указанный ключ (action)».
После того, как разобрался, оказалось, что по ошибке вместо
вызова чанка со сниппетом AjaxForm вызвал чанк [[$tpl.AjaxForm....]].
Может кому мои грабли пригодятся.
После того, как разобрался, оказалось, что по ошибке вместо
вызова чанка со сниппетом AjaxForm вызвал чанк [[$tpl.AjaxForm....]].
Может кому мои грабли пригодятся.
Если у кого возникнет подобная ошибка, проверьте форму на незакрытые теги/ошибки кода.
Как пример, для тестирования можете взять любую простую форму вида:
Как пример, для тестирования можете взять любую простую форму вида:
<form name="form" action="#" method="POST">
<input type="submit" value="Send" />
</form>
Если она работает — то и ваша должна, просто в ней самой могут присутствовать ошибки.
Как вариант, мне в некоторых случаях помогло добавление в форму action="[[~[[*id]]]]"
кто понял как с этим бороться, форумы перечитал, не помогает.
Пробовал:
Пробовал
Код:
Пробовал:
<form name="form" action="#" method="POST">
<input type="submit" value="Send" />
</form>
Ошибка сотается.Пробовал
action="[[~[[*id]]]]"
— ошибка остаетсяКод:
<div class="contactform">
[[!AjaxForm?
&form=`tpl.form`
&snippet=`FormIt`
&hooks=`FormItSaveForm`
&formName=`Форма обратной связи`
]]
</div>
tpl.form<form name="form" action="#" method="POST">
<input type="submit" value="Send" />
</form>
проверь чтобы все формы на странице и на сайте вызывались некэшируемыми
!AjaxForm
На всем сайте одна форма, ее код сократил до одной кнопки, приведен выше.
Проблема в контекстах
У меня два языка
ТАК ВСЕ РАБОТАЕТ:
Но мне нужно поменять web -> sitename.com/en/ а ru оставить -> sitename.com/ru/ ит по-умолчанию сделать sitename.com/ru/
В контексте меняю:
У меня два языка
ТАК ВСЕ РАБОТАЕТ:
web - en
sitename.com/
ru - ru
sitename.com/ru/
плагин переключения:<?php
if($modx->context->get('key') != "mgr") {
switch ($_REQUEST['cultureKey']) {
case 'ru':
$modx->switchContext('ru');
break;
default:
$modx->switchContext('web');
break;
}
/* Очищаем GET-параметр чтобы не допустить появлении ссылки вида cultureKey=xy при генерации URL других компонентов */
unset($_GET['cultureKey']);
}
.htaccessRewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(ru|en)/favicon.ico$ favicon.ico [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(ru|en)/assets(.*)$ assets$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(ru|en)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
Так не работает:Но мне нужно поменять web -> sitename.com/en/ а ru оставить -> sitename.com/ru/ ит по-умолчанию сделать sitename.com/ru/
В контексте меняю:
web - en
sitename.com/en/
ru - ru
sitename.com/ru/
плагин переключения:плагин:
<code><?php
if($modx->context->get('key') != "mgr") {
switch ($_REQUEST['cultureKey']) {
case 'en':
$modx->switchContext('web');
break;
default:
$modx->switchContext('ru');
break;
}
/* Очищаем GET-параметр чтобы не допустить появлении ссылки вида cultureKey=xy при генерации URL других компонентов */
unset($_GET['cultureKey']);
}
Сайт работает как задумано, AjaxForm перестает работать и выдает Не могу найти указанный ключ формы (action).
Нет, что то опять не то. Через время опять перестала работать.
Читал похожие темы нашел около 6-8.
Читал похожие темы нашел около 6-8.
была недавно такая проблема.
В файерфокс форма отправляется. В хроме — не найден ключ.
Помог некешироавнный вызов AjaxForm вместо кешированного.
В файерфокс форма отправляется. В хроме — не найден ключ.
Помог некешироавнный вызов AjaxForm вместо кешированного.
А у Вас контексты есть?
Если кому понадобится (по настройке AjaxForm и мультиязычности), возможно Мне из будущего… Мало ли, придётся с этим опять столкнуться, не дай Бог…
Короче, лезем в «Системные настройки» системы управления MOdx Revo, раздел «Сессии и куки», параметр «session_cookie_path» и меняем на «/». И плюс к карме вот этому человеку и его статье — https://modx.pro/howto/16334… если бы не Он, я бы кого-нибудь убил или сам убился.
Короче, лезем в «Системные настройки» системы управления MOdx Revo, раздел «Сессии и куки», параметр «session_cookie_path» и меняем на «/». И плюс к карме вот этому человеку и его статье — https://modx.pro/howto/16334… если бы не Он, я бы кого-нибудь убил или сам убился.
Ничего из вышепредложенного к сожалению не подошло (сайт с 5-ю контекстами под разные языки), но помогло следующее: обратите внимание на системные переменные session_cookie_domain и session_name. В какой-то момент обнаружил, что пишется две сессии PHPSESSID для разных доменов ('.www.domain.name' и '.domain.name'). Указал явно session_cookie_domain в '.domain.name' и session_name в 'cookiename'
Подниму тему, т.к. данная проблема периодически возникает у пользователей, а ее воспроизвести не можешь. Не может ли это быть связано с серверным параметром session.gc_maxlifetime. По умолчанию он обычно равен 1440 сек. или 24 минуты. На сервере каждому пользователю сайта инициализируется сессия, которая при бездействии очищается через 24 минуты. ajaxForm при инициализации в сессию пользователю пишет ключ формы. Возможно же что, пользователь начал заполнять какую либо форму, его отвлекли, вернулся через час-два, продолжил заполнять форму жмет отправить-сохранить форму, и т.к. сервер уже зачистил сессию, то ajaxForm и не находит ключ в сессии. Отсюда и сообщение о не найденном ключе. Как решение, увеличить время жизни сессии session.gc_maxlifetime.
Тоже замучился но у меня форма динамическая инпуты подставляются через JS и хеш не совпадает, сделал такой костыль пока:
В assets/components/ajaxform/action.php
Закомментировал с 25 по 27 строку проверку
В assets/components/ajaxform/action.php
Закомментировал с 25 по 27 строку проверку
$_REQUEST['af_action']
Кому лень вот готовый код (костыль):<?php
/** @var modX $modx */
define('MODX_API_MODE', true);
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
// Switch context if need
if (!empty($_REQUEST['pageId'])) {
if ($resource = $modx->getObject('modResource', (int)$_REQUEST['pageId'])) {
if ($resource->get('context_key') != 'web') {
$modx->switchContext($resource->get('context_key'));
}
$modx->resource = $resource;
}
}
/** @var AjaxForm $AjaxForm */
$AjaxForm = $modx->getService('ajaxform', 'AjaxForm', $modx->getOption('ajaxform_core_path', null,
$modx->getOption('core_path') . 'components/ajaxform/') . 'model/ajaxform/', array());
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
$modx->sendRedirect($modx->makeUrl($modx->getOption('site_start'), '', '', 'full'));
} /*elseif (empty($_REQUEST['af_action'])) {
echo $AjaxForm->error('af_err_action_ns');
}*/ else {
echo $AjaxForm->process($_REQUEST['af_action'], array_merge($_FILES, $_REQUEST));
}
@session_write_close();
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.