„Nieprawidłowy klucz formularza. odśwież stronę ”- nie można zalogować się do panelu administracyjnego


18

Regularnie odwiedzam moją witrynę, aby upewnić się, że działa, i zauważyłem, że obrazy produktów nie są wyświetlane, ponieważ sądząc, że to problem z pamięcią podręczną indeksowania, próbowałem zalogować się do panelu administracyjnego i otrzymałem błąd:

„nieprawidłowy klucz formularza. Odśwież stronę”

lub

Innymi objawami są klienci, którzy nie mogli dodawać produktów do koszyka i bardzo niska wydajność.

W dziennikach nie ma błędów (/ var / logs)

Jakie dodatkowe kroki należy wykonać, aby rozwiązać ten problem?

Odpowiedzi:


48

Dzieje się tak również wtedy, gdy domena plików cookie w System> Konfiguracja> Internet> Pliki cookie różni się od rzeczywistej domeny witryny.

Aby usunąć ustawienie bez dostępu do panelu administracyjnego:

  1. użyj następującego zapytania SQL w konsoli MySQL lub w kliencie takim jak phpMyAdmin:

    DELETE FROM core_config_data WHERE path='web/cookie/cookie_domain';
  2. wyczyść pamięć podręczną. Jeśli używasz domyślnego zaplecza opartego na pamięci podręcznej, usuń wszystkie katalogi poniżej var/cache.

Następnie, gdy tylko będziesz mógł ponownie się zalogować, ustaw prawidłową domenę plików cookie dla każdej witryny lub sklepu (przykład: .example.comna przykład.com, www.example.com i wszystkie inne subdomeny)

Jeśli używasz n98-magerun (i powinieneś!), Możesz to zrobić za pomocą:

n98-magerun config:delete web/cookie/cookie_domain
n98-magerun cache:clean config

Cześć @fschmengler, proszę dodać więcej szczegółów na temat sprawdzania tego ustawienia z phpmyadmin, ponieważ użytkownik nie może zalogować się do panelu administracyjnego, a niektórzy programiści, którzy są nowi w rozwoju Magento, nie wiedzą, gdzie sprawdzić takie ustawienia w bazie danych. Przepraszam, ale tylko za pomoc nowych członków :)
Mohit Kumar Arora

@MohitKumarArora masz rację, zaktualizowałem odpowiedź
Fabian Schmengler

Teraz głosowałem. :)
Mohit Kumar Arora

Sposób n98 działa fantastycznie. Dzięki za informację.
Andy Jones

@FabianSchmengler, sprawdziłem dane core_config_data i jest to poprawna wartość dla mojej witryny. Czy nadal muszę wykonać wszystkie podane przez Ciebie kroki? Czy twoje podejście nadal działałoby w tym przypadku?
datasn.io

18

Zamieszczam pytanie / odpowiedź, ponieważ nie znalazłem nic istotnego.

Problem polegał na tym, że dysk, na którym znajduje się moja instalacja Magento, był pełny. Uwolniłem trochę miejsca, wyczyściłem / var / session i / var / cache i wszystko wróciło do normy.


1
Ostrzeżenie: usunięcie var/sessionspowoduje wylogowanie wszystkich i usunięcie wszystkich koszyków gości. Zobacz tutaj rozwiązanie, które usuwa tylko stare sesje: magento.stackexchange.com/a/58167/243
Fabian Schmengler

@fschmengler tak, ale czy naprawdę chcesz zaryzykować dzięki sesjom, które nie zostały właściwie utworzone na początek? Kiedy sprawdziłem sesję / var /, pojawiły się wszelkiego rodzaju pliki 0kb, co nie jest normalne.
SR_Magento

1
Absolutnie pierwsza rzecz do sprawdzenia. Grzebałem nad tym od wielu godzin. Dzięki!
Bryant Jackson,

Dla mnie było to miejsce na dysku. Dowiedziałem się po próbie pobrania polecenia git, ponieważ nie powiodło się to z powodu błędu związanego z miejscem na dysku.
Damodar Bashyal

@SR_Magento Sir Usunąłem folder pamięci podręcznej i folder sesji tak wiele razy, że działa to tylko przez pewien czas, po pewnym czasie pojawia się ten sam problem
Amaresh Tiwari

3

Istnieją 3 rozwiązania:

  1. Użyj tych poleceń w phpmyadmin

    USUŃ Z core_config_data GDZIE ścieżka = 'web / cookie / cookie_domain';

    USUŃ Z core_config_data GDZIE ścieżka = 'web / cookie / cookie_path';

Teraz spróbuj się zalogować.

2. Usuń wszystko z folderu var, a następnie sprawdź, czy działa.

3. Zamień plik .htaccess na przykładowy plik .htaccess, a następnie spróbuj zalogować się do administratora.

Mam nadzieję, że ci to pomoże.


1

Kolejny możliwy, nieco oczywisty problem, który należy sprawdzić w pierwszej kolejności: jeśli witryna korzysta z protokołu SSL, upewnij się, że nie używasz protokołu http dla strony administratora; powinieneś używać https . np. https://example.com/admin


1

W moim przypadku wydaje się, że problem polega na tym, że utworzyłem administratora za pomocą n98-magerun z użytkownikiem, który nie może pisać na magentofolder / var i zamiast tego użyłem folderu zastępczego / tmp / magento.

Właśnie usunąłem administratora i wykonałem sudo -iu OTHERUSER(użytkownik, który jest właścicielem folderu Magento) i n98-magerun admin:user:createponownie uruchomiłem, aby utworzyć mojego użytkownika.


AKTUALIZACJA: W innym przypadku adres URL administratora był odwiedzany bez www. składnia, a ustawienia plików cookie korzystały z www. Po prostu umieszczam www. w administracyjnym adres URL rozwiązał problem. ;)


Nie powinno tak być admin:user:create?
sr9yar

1
@ sr9yar nope - That's Magento2 - this M1
treyBake

0

Oprócz powyższego kroku czyszczenia pamięci podręcznej musiałem również postępować zgodnie z poniższym artykułem i ustawić informacje o danych sesji w prawidłowej ścieżce, wykonując poniższe kroki

Zobacz artykuł

/programming/26123081/failed-to-write-session-data-magento

Naprawiłem to, zmieniając session.save_path, aby umieścić go na maszynie wirtualnej.

Zmień aplikację pliku / etc / local.xml

zastąpiony poniżej

Potem zaczęło działać. Czasami nie można tak naprawdę powiedzieć problemu, dlatego ważne jest, aby włączyć rejestrowanie błędów. Włącz to, odwołując się do następującego artykułu

https://www.thecreativedev.com/how-to-enable-system-log-and-errorswarning-in-magento/


0

Wyczyść pliki cookie i pamięć podręczną. Otwórz panel administracyjny w trybie incognito.


-3

Ten znany problem pojawia się zwykle po zastosowaniu poprawki SUPEE-7405 zawartej w wersji Magento 1.9.2.3. Można to rozwiązać, dodając poniższy kod w pliku - app / code / local / Mage / Core / Model / Session.php

public function validateFormKey()
{
    if (!($formKey = $_REQUEST['form_key']) || $formKey != $this->getFormKey()) {
        return false;
    }
    return true;
}

Ten plik może nie istnieć w twoim repozytorium, więc skopiuj go app/code/core/Mage/Core/Model/Session.phpi wklej po. app/code/local/Mage/Core/Model/Session.phpPo dodaniu powyższej funkcji do pliku, ponieważ może brakować go w głównym pliku.

Wyczyść pamięć podręczną przeglądarki i usuń pliki cookie. Wyczyść wszystkie pliki w Magento var/cachei var/sessionzawartość folderów. Następnie zaloguj się do panelu administracyjnego.


Eee ... czy nie byłoby lepszym rozwiązaniem byłoby dodanie danych wyjściowych bloku klucza formularza do przesłoniętego szablonu adminhtml? (W ten sposób ochrona CSRF będzie działać zgodnie z przeznaczeniem).
Luke A. Leber

2
Nigdy nie należy edytować podstawowych plików.
Maks.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.