Niemand kann sich anmelden und auf abgelehnte Nachrichten zugreifen

7

Die Seite hat bis gestern funktioniert und gerade jetzt verhält sie sich seltsam.

  • Die Site wird nicht mit Funktionen erstellt, ein Archivspeicherauszug mit Code und Datenbank wird auf den Server kopiert und die alte Installation wird (leider) manuell durch die neue ersetzt. Jetzt ist es irrelavant, auch auf dem lokalen Server zu geschehen.
  • Es ist kein Caching-Modul installiert. Die Sitzungs-API ist ebenfalls nicht installiert.
  • Das Thema ist auf 'sieben' gesetzt (Kern-Admin-Thema, nur für den Fall).
  • Der Watchdog enthält keine Fehler, Warnungen oder Informationen außer der üblichen "Sitzung für Benutzer xyz geöffnet".
  • Die Einstellungsdatei enthält keine spezielle Cookie-Direktive. Das hat es nie getan.
  • Die Seite läuft auf PHP 5.6, Apache 2.2, CentOS 6. PHP läuft als Fast-CGI. Dasselbe wie immer.
  • Es ist Drupal 7.

Ich gehe zu example.com/user/login, gebe Benutzername und Passwort ein, das Formular wurde erfolgreich gesendet, die Seite wird zu example.com/user/%uid umgeleitet (habe sowohl uid 1 als auch andere Benutzer ausprobiert). und boom! Ich bekomme einen Zugang verweigert . Und der Benutzer ist nicht angemeldet.

Wenn ich die Sitzungstabelle mit abschneide, truncate table sessionskann ich mich mit jedem Benutzer einmal und nur einmal anmelden. Andererseits kann sich niemand anmelden, nicht einmal UID 1.

Auch mit einem Link zum Zurücksetzen des Passworts (mit dem Befehl drush ulikann ich mich problemlos anmelden).

Ich habe alle Contrib-Module und -Themen deaktiviert , aber das gleiche Problem besteht weiterhin.

Was verursacht solche Probleme mit Sitzungen? irgendwelche Ideen?

hkoosha
quelle
2
Wenn dies Drupal 6 ist, stellen Sie sicher, dass der anonyme Benutzerdatensatz in der Datenbank immer uidnoch den Wert 0 hat (er wird häufig von einer SQL-Dumping-Software gelöscht und neu nummeriert). Was Sie beschreiben, ist genau das, was passiert, wenn diese Aufzeichnung veröffentlicht wird
Clive
@Clive danke, ich habe nachgesehen, aber UID 0 ist da. Das Importieren des gleichen DB-Dumps auf meinen Laptop funktioniert auch einwandfrei. und es ist D7, ich habe die Frage bearbeitet.
Hkoosha
Ich vermute, dies hat mit dem Hashing der Passwörter zu tun. Möglicherweise sollten Sie Ihre Benutzer zwingen, sich neu zu registrieren und ihr Passwort zu wiederholen. Auf der neuen Domain wird der Passwort-Hash geändert und ist daher niemals gültig ...
Akko
@ Akko nein ... trotzdem bekomme ich einen Zugang verweigert. Ich erhalte einen falschen Passwortfehler, wenn ein falsches Passwort eingegeben wird, aber das Problem ist, dass der mysteriöse Zugriff verweigert wird.
Hkoosha
@loolooyyyy Hast du das Modul 'Content Access' installiert oder so?
Krishna Mohan

Antworten:

13

Das Problem war das Modul ip_geoloc . Es wurde vermasselt $ _SESSION Variable wird eine Lösung auf bestimmten der Ausgabewarteschlange (jetzt!) Und das Modul Autor stimmt es. Es ist sehr wahrscheinlich, dass dies aufgrund einer Fehlkonfiguration durch mich geschieht. Der Benutzer wurde erfolgreich angemeldet, aber sofort wurde seine Sitzung ungültig. Irgendwie war es nicht genug, es zu deaktivieren und das Verzeichnis musste aus dem Drupal-Stamm verschoben werden. Ich bin zu 100% sicher, dass keine seiner Funktionen oder APIs irgendwo anders verwendet werden. Vielleicht ein Cache-Problem?

Lektion gelernt:

Wenn Sie ein Anmeldeproblem haben, versuchen Sie, die Variable $ _SESSION auf dem Server mithilfe von devel und ihren Hilfsfunktionen (z. B. dpm , dsm , dd , ... oder als letztes Mittel var_export) zu überprüfen, und nicht mit Ihrer Google / Firefox-Entwicklerkonsole .

Dies ist das dritte Mal, dass ich mit diesem seltsamen Verhalten konfrontiert bin und das erste Mal, dass ich es beheben konnte. Wenn Sie dieses Problem haben, versuchen Sie, diese Checkliste zu befolgen:

Frag dich selbst:

  • Behebt das Abschneiden der Sitzungstabelle das Problem?
  • Behebt das Erzwingen einer Änderung des Benutzerkennworts das Problem?
  • Haben Sie Ihrer settings.php eine bestimmte Konfiguration hinzugefügt ? zB base_url, cookie_domain, ...
  • Existiert UID 0 in Ihrer Datenbank (dh anonymer Benutzer)?
  • Ist ein Umleitungsmodul installiert? search404 , redirect , global_redirect , ...
  • Haben Sie ein benutzerdefiniertes Modul aktiviert?
  • Gibt es Probleme mit Ihrem Thema ?
  • Haben Sie Pfadänderungsmodule, z. B. path_alias?
  • Haben Sie ein Modul, das das Anmeldeverhalten ändert? zB logintoboggan
  • Haben Sie ein Caching-Modul aktiviert? zB Authcache , Memcache , Session_Cache , Boost , Lack , ...
  • Haben Sie ein Zugriffskontrollmodul aktiviert? zB Workbench, content_access, acl, og_access, ...
  • Und schließlich haben Sie ein Modul aktiviert, das den Benutzer $ _SESSION ändert? zB session_api , session_cache , ip_geoloc , ...

Orte zu suchen / Dinge zu tun

  • Schauen Sie sich Drupals Watchdog-Nachrichten an. Wenn Sie sich nicht anmelden können, verwenden Sie drush watchdog-show --tail, um zu sehen, was passiert.
  • Wenn Sie Apache und Mod-PHP ausführen, schauen Sie im Fehlerprotokoll von Apache nach, normalerweise unter / var / log / apache / error_log für * nix-Systeme.
  • Wenn Sie php-fpm ausführen, lesen Sie das php-fpm-Protokoll. Stellen Sie sicher, dass kein Kommunikationsproblem mit dem PHP-Daemon vorliegt, z. B. gehen keine Header verloren. Wenn Sie kein Fehlerprotokoll sehen, versuchen Sie, Ihre Site mit dem internen Drush / PHP-Server auszuführen. der Befehl ist drush rsoderdrush rs the.ip.goes.here:thePort
  • Erstellen Sie eine vollständige Sicherung, deaktivieren Sie alle Module mit diesem Befehl, nachdem Sie eine vollständige Sicherung durchgeführt haben (Sie können eine Sicherung mit drush ardoder nur mit einer Datenbank drush sql-dump > db.sqlerstellen oder das Modul backup_migrate verwenden)
    drush dis -y $(drush pml --nocore --status=enabled --pipe)-> Dieser Befehl funktioniert nur in * nix-Systemen. Ich kenne die direkte Übersetzung für Windows nicht .
  • Stellen Sie Ihr Standardthema auf etwas ... Sicheres ein! wie sieben oder Girlande. Wenn Sie sich nicht anmelden können, verwenden Sie diese Drush-Befehle :
    drush en seven && drush vset theme_default seven;
  • Überwachen Sie die Variable $ _SESSION mit einem Debugging-Tool, um festzustellen, ob der Inhalt korrekt, in Ordnung und fehlerfrei ist.
  • Stellen Sie für alle Prozesse und Dämonen, die an der Bearbeitung einer Anforderung beteiligt sind (nginx, php-fpm, apache, lack ...), sicher, dass alle Schreibzugriff auf ihr tmp-Verzeichnis haben.

Viel Glück beim Debuggen!

hkoosha
quelle
4

Was für mich funktioniert hat, war das Aktivieren und Konfigurieren der $cookie_domainVariablen in settings.php (weil ich eine Site habe, auf die 2 verschiedene Domänen zugreifen können).

Beachten Sie den Kommentar vor dieser Variablen! Der Domainname muss mit einem Punkt beginnen. EX:

$cookie_domain = '.example.com';

Viel Glück!

Heitor Althmann
quelle
Sie haben mir Stunden des Debuggens
erspart