web-dev-qa-db-ja.com

誰もログインして拒否メッセージにアクセスすることはできません

このサイトは昨日まで機能していましたが、今は奇妙な動作をしています。

  • サイトはnot機能付きで作成され、コードとデータベースを含むアーカイブダンプがサーバーにコピーされ、古いインストールが手動で(残念ながら)新しいものに置き換えられます。 今では、ローカルサーバーでも問題は発生していません。
  • キャッシングモジュールがインストールされていません。セッションAPIもインストールされていません。
  • テーマは「7」に設定されています(念のため、コア管理テーマ)。
  • ウォッチドッグには、通常の「ユーザーxyzのために開かれたセッション」以外のエラー、警告、情報は含まれません。
  • 設定ファイルには、特別なcookieディレクティブは含まれていません。それは決してしなかった。
  • サイトはphp 5.6、Apache 2.2、CentOS 6で実行されています。PHPはfast-cgiとして実行されています。いつもと同じです。
  • Drupal 7.です。

Example.com/user/loginに移動し、ユーザー名とパスワードを入力すると、フォームが正常に送信され、ページがexample.com/user/%uidにリダイレクトされます(uid 1と他のユーザーの両方が試されました)。そしてブーム! アクセスが拒否されました。また、ユーザーはログインしていません。

sessionsテーブルをtruncate table sessionsで切り捨てると、どのユーザーでも一度だけログインできます。その後、uid 1でさえログインできなくなります。

また、パスワードリセットリンクを使用します(コマンドdrush uliを使用して、問題なくログインできます)。

allcontribモジュールとテーマを無効にしましたが、同じ問題が解決しません。

セッションでこのような問題を引き起こしているのは何ですか?何か案は?

7
hkoosha

問題は ip_geoloc モジュールでした。それは$ _SESSION変数をめちゃくちゃにしていました、解決策は 問題キュー (今のところ!)で与えられ、モジュールの作者はそれに同意します。私が設定を誤ったために発生している可能性が非常に高いです。ユーザーは正常にログインしましたが、すぐにセッションが無効になりました。どういうわけかそれを無効にするだけでは不十分で、そのディレクトリをDrupal rootから移動する必要がありました。その関数やAPIが他の場所で使用されていないことは100%確実です。キャッシュに関する問題でしょうか?

学んだ教訓:

サインインの問題がある場合は、$ _ SESSION変数をチェックしてみてくださいサーバー上devel を使用して、ヘルパー関数(例 dpm 、- dsmdd 、...または最後の手段としてvar_export)を使用し、google/firefox開発者コンソールを使用しない。

これは私がこの奇妙な行動に直面している3回目であり、修正することができたのは初めてです。この問題が発生している場合は、次のチェックリストに従ってください。

自問してみてください:

  • sessionsテーブルを切り捨てることで問題は解決しますか?
  • ユーザーパスワードの変更を強制することで問題は解決しますか?
  • settings.phpに特定の設定を追加しましたか?例:base_url、cookie_domain、...
  • UID 0=データベースに存在しますか(つまり、匿名ユーザー)?
  • redirectionモジュールがインストールされていますか? search404redirectglobal_redirect 、...
  • カスタムモジュールが有効になっていますか?
  • テーマに問題はありませんか?
  • パス変更モジュール(path_aliasなど)はありますか?
  • ログイン動作を変更するモジュールはありますか?例 logintoboggan
  • キャッシングモジュールを有効にしましたか?例 authcachememcachesession_cacheboostvarnish 、...
  • アクセス制御モジュールが有効になっていますか?例:ワークベンチ、content_access、acl、og_access、...
  • 最後に、ユーザー$ _SESSIONを変更するモジュールを有効にしましたか?例: session_apisession_cacheip_geoloc 、...

見る場所/するべきこと

  • Drupalsウォッチドッグメッセージを確認してください。ログインできない場合は、drush watchdog-show --tailを使用して何が起こっているかを確認してください。
  • Apacheとmod-phpを実行している場合は、Apacheのエラーログを確認します。通常、* nixシステムの場合は/ var/log/Apache/error_logにあります。
  • Php-fpmを実行している場合は、php-fpmログを参照して、ヘッダーが失われていないなど、phpデーモンとの通信に問題がないことを確認してください。エラーログが表示されない場合は、drush/php内部サーバーでサイトを実行してみてください。コマンドは_drush rs_または_drush rs the.ip.goes.here:thePort_です
  • 完全バックアップを作成し、完全バックアップを作成した後、このコマンドですべてのモジュールを無効にします(_drush ard_またはデータベース_drush sql-dump > db.sql_を使用してバックアップを作成するか、backup_migrateモジュールを使用できます)
    drush dis -y $(drush pml --nocore --status=enabled --pipe)->このコマンドは* nixシステムでのみ機能します。ウィンドウの直接変換がわかりません。
  • デフォルトのテーマを何かに設定してください...安全です!セブンやガーランドなど。ログインできない場合は、次のDrushコマンドを使用します。
    _drush en seven && drush vset theme_default seven_;
  • デバッグツールを使用して$ _SESSION変数を監視し、その内容が正しいか、問題ないか、正常かどうかを確認します。
  • リクエストの処理に関連するすべてのプロセスとデーモン(nginx、php-fpm、Apache、varnish ...)について、それらすべてがtmpディレクトリへの書き込みアクセス権を持っていることを確認してください。

幸運のデバッグ!

13
hkoosha

私にとってうまくいったのは、$cookie_domain settings.phpの変数(2つの異なるドメインからアクセスできるサイトがあるため)。

この変数の前のコメントに注意してください!ドメイン名はピリオドで始まる必要があります。例:

$cookie_domain = '.example.com';

幸運を!

4
Heitor Althmann