Не могу найти указанный ключ формы (action).

Возникает такая вот ошибка, появилась она недавно и на многих сайтах сразу примерно с месяц назад (заметил только сейчас, клиенты пожаловались что форма не работает). Для простоты пока ищу решение проблемы только на 1 сайте. Форма отправляться в Хроме, в остальных не работает.

Может это как-то связано с этим?

С 18 мая 2016 года администрацией mail.ru была включена строгая политика DMARC для всех почтовых ящиков в доменах почтового сервиса mail.ru, таких как *@(mail.ru/list.ru/inbox.ru/bk.ru/mail.ua), о чем предварительно сообщалось в пресс-релизе компании mail.ru:
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.
UPD
Вызов снипета некешируемым решило мою проблему.
Viktor
22 июня 2016, 14:47
modx.pro
1
15 878
0

Комментарии: 37

Григорий Коленько
22 июня 2016, 23:06
0
Поставь в настройках путь куки /
И очисти таблицу сессий
    Viktor
    23 июня 2016, 12:37
    0
    И очисти таблицу сессий
    не помогло
    Поставь в настройках путь куки /
    поставил session_cookie_path /
    после этого даже в хроме перестало работать
    Здоров Александр
    23 июня 2016, 11:25
    0
    поддерживаю, у самого та же проблема…
      Сергей
      19 июля 2016, 14:52
      0
      Такая же ерунда на нескольких сайтах. Кто-нибудь решил эту проблему?
        Viktor
        19 июля 2016, 16:39
        +1
        похоже, настройки хостинга. но какие — хз
          Сергей
          19 июля 2016, 16:41
          0
          А хостинг не таймвеб?
            Viktor
            19 июля 2016, 16:42
            +1
            нет
              Сергей
              19 июля 2016, 17:02
              0
              Единственное что заметил- когда кэш почищу, ошибка на некоторое время исчезает.
        Serg
        20 июля 2016, 17:40
        0
        Та же проблема Как отключить эту проверку ключа? Или это нарушит безопасность? Устанавливал AjaxForm после регистрациии с ключом от modstore.pro
          Александр
          22 июля 2016, 15:33
          0
          Аналогично!

          У меня форма входа, где логином является почта. Сегодня у одного из пользователей никак не получается войти на сайт. — («не могу найти указанный ключ...»).

          У пользователя Хром. Пробовал войти сам под этим пользователем — всё хорошо и в хроме и в опере.

          Логин ...@mail.ru. Неужели действительно как-то связано?
            Александр
            22 июля 2016, 15:53
            0
            вообщем главная сейчас проблема, что не могу воспроизвести эту ошибку ;( ибо у меня всё гуд, а пользователь бедолага — без доступа. Куда копать?
            Спасибо.
              Viktor
              07 августа 2016, 17:26
              0
              попробуй разлогиниться с админа и отправить форму
            Василий Столейков
            27 июля 2016, 06:13
            0
            Хостинг от modhost.pro, та же проблема с AjaxForm + собственный сниппет который добавляет страницу + регистрирует пользователя, хотя до этого всё работало правильно.
            Причём у меня не предусмотрена отправка письма (хотя поле email присутствует).
            Даже пустая незаполненая форма вызывает ту же самую ошибку, вместо стандартной проверки заполненности всех полей.
            Кто-нибудь нашел причину проблемы?
              Василий Столейков
              27 июля 2016, 06:24
              0
              Интересно, что эта ошибка у меня появляется только в Chrome 49.0.2623.112 m + XP (старая версия хрома для windows xp), а в Linux Ubuntu + Firefox всё работает исправно!
              Может это в старых версиях хрома такое? (не было ещё возможности проверить на новых)…
                Сергей
                23 августа 2016, 11:43
                0
                У меня и в опере такая проблема, к сожалению(
                  Илья Уткин
                  23 августа 2016, 11:53
                  2
                  +2
                  Попробуйте у ресурса, на котором происходит такая фигня, убрать галочку «Кешируемый»
                    Viktor
                    14 ноября 2017, 14:34
                    0
                    Помогает, но ведь это не решение проблемы.

                    Я, по-моему, понял как баг проявляется:

                    1) чистим кэш;
                    2) завершаем все сеансы;
                    3) заходим на сайт, например с хрома, CTRL+F5 (на всякий случай);
                    4) отправляем форму — все нормально;
                    5) заходим на сайт с другого браузера, CTRL+F5, отправляем форму — выдает ошибку.

                    Если в 3 пункте заменить хром на другой браузер — форма будет работать только в нем, а в других нет.

                    Проблема в сессиях?

                    Кто сможет разобраться и пофиксить? Даже денег заплачу.
                      Василий Наумкин
                      14 ноября 2017, 15:34
                      +1
                      AjaxForm всегда должен вызываться некэшированным.
                        Viktor
                        14 ноября 2017, 16:49
                        0
                        Похоже в этом и была проблема, спасибо. Подумать только… аж стыдно.
                          Василий
                          22 сентября 2020, 15:29
                          0
                          А не планируется в новых версиях ajaxform сделать возможность работы с кэшируемыми ресурсами? Есть плагины, которые замечательно кешируют страницы в modx, увеличивая в разы скорость работы (например, xfpc), но из-за ajaxForm приходится либо от них отказываться, либо свои обработчики писать.
                Viktor
                07 августа 2016, 17:28
                0
                Василий Наумкин, куда копать с этой проблемой?
                  Александр
                  21 декабря 2016, 10:59
                  0
                  Кто ни будь решил данную проблему? такое же появилось после обновления ревы до 2.5.2
                    Константин Ильин
                    21 декабря 2016, 12:46
                    0
                    Хостинги: таймвеб, бигет
                    После обновления:
                    У меня было такое, когда я в ручную вызвал инициализацию:
                    <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

                    Ну и после обновления надо чистить кеш :)
                      Сергей Малышев
                      16 января 2017, 17:40
                      +1
                      Была проблема «Не могу найти указанный ключ (action)».
                      После того, как разобрался, оказалось, что по ошибке вместо
                      вызова чанка со сниппетом AjaxForm вызвал чанк [[$tpl.AjaxForm....]].

                      Может кому мои грабли пригодятся.
                        Альберт
                        24 мая 2017, 18:08
                        0
                        Если у кого возникнет подобная ошибка, проверьте форму на незакрытые теги/ошибки кода.
                        Как пример, для тестирования можете взять любую простую форму вида:

                        <form name="form" action="#" method="POST">
                        <input type="submit" value="Send" />
                        </form>
                        Если она работает — то и ваша должна, просто в ней самой могут присутствовать ошибки.
                          ALEXANDER
                          26 июня 2017, 23:21
                          0
                          Как вариант, мне в некоторых случаях помогло добавление в форму action="[[~[[*id]]]]"
                            Greg
                            12 июня 2019, 19:57
                            0
                            кто понял как с этим бороться, форумы перечитал, не помогает.
                            Пробовал:
                            <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>
                              Viktor
                              12 июня 2019, 20:11
                              0
                              проверь чтобы все формы на странице и на сайте вызывались некэшируемыми
                              !AjaxForm
                                Greg
                                13 июня 2019, 01:48
                                0
                                На всем сайте одна форма, ее код сократил до одной кнопки, приведен выше.
                                  Greg
                                  13 июня 2019, 14:24
                                  0
                                  Проблема в контекстах
                                  У меня два языка

                                  ТАК ВСЕ РАБОТАЕТ:
                                  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']);
                                  }
                                  .htaccess
                                  RewriteCond %{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).
                                    Greg
                                    12 августа 2019, 12:13
                                    0
                                    Нет, что то опять не то. Через время опять перестала работать.
                                    Читал похожие темы нашел около 6-8.
                                Александр Мельник
                                12 августа 2019, 15:21
                                0
                                была недавно такая проблема.
                                В файерфокс форма отправляется. В хроме — не найден ключ.
                                Помог некешироавнный вызов AjaxForm вместо кешированного.
                                  Greg
                                  13 августа 2019, 18:24
                                  0
                                  А у Вас контексты есть?
                                  Максим
                                  01 июня 2020, 16:24
                                  0
                                  Если кому понадобится (по настройке AjaxForm и мультиязычности), возможно Мне из будущего… Мало ли, придётся с этим опять столкнуться, не дай Бог…
                                  Короче, лезем в «Системные настройки» системы управления MOdx Revo, раздел «Сессии и куки», параметр «session_cookie_path» и меняем на «/». И плюс к карме вот этому человеку и его статье — https://modx.pro/howto/16334… если бы не Он, я бы кого-нибудь убил или сам убился.
                                    Антон Тарасов
                                    15 марта 2021, 10:55
                                    0
                                    Ничего из вышепредложенного к сожалению не подошло (сайт с 5-ю контекстами под разные языки), но помогло следующее: обратите внимание на системные переменные session_cookie_domain и session_name. В какой-то момент обнаружил, что пишется две сессии PHPSESSID для разных доменов ('.www.domain.name' и '.domain.name'). Указал явно session_cookie_domain в '.domain.name' и session_name в 'cookiename'
                                      Владимир Бабусенко
                                      11 октября 2023, 12:34
                                      0
                                      Подниму тему, т.к. данная проблема периодически возникает у пользователей, а ее воспроизвести не можешь. Не может ли это быть связано с серверным параметром session.gc_maxlifetime. По умолчанию он обычно равен 1440 сек. или 24 минуты. На сервере каждому пользователю сайта инициализируется сессия, которая при бездействии очищается через 24 минуты. ajaxForm при инициализации в сессию пользователю пишет ключ формы. Возможно же что, пользователь начал заполнять какую либо форму, его отвлекли, вернулся через час-два, продолжил заполнять форму жмет отправить-сохранить форму, и т.к. сервер уже зачистил сессию, то ajaxForm и не находит ключ в сессии. Отсюда и сообщение о не найденном ключе. Как решение, увеличить время жизни сессии session.gc_maxlifetime.
                                        vectorserver
                                        20 марта 2024, 06:45
                                        0
                                        Тоже замучился но у меня форма динамическая инпуты подставляются через JS и хеш не совпадает, сделал такой костыль пока:
                                        В 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();
                                          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                          37