web-dev-qa-db-ja.com

Laravelセッションは、Laravel 5.4

だからタイトルは基本的にそれをすべて言っている、私はLaravel 5.4、PHP 7.1を使用しており、ローカルマシンセッションではうまく機能している。または、すべてを破壊する新しいCSRFトークンを取得するたびにページをリロードします。セッションドライバーとしてデータベースを使用しており、リクエストごとにDBに新しいエントリを作成します。これは、最初にアップグレードしたときにローカルマシンで発生しましたが、修正するには、cookie_domain env変数を更新することで解決しましたが、新しいサーバーで考えられるすべてのドメインを試しましたが、まだ機能しません。

ここに私が知っていること、

  • セッションCookieはChrome-> Application-> Cookiesの下に保存されていません。これは実際にローカルセットアップに表示されています。

  • CSRF-TOKENはページのリロードごとに新しい値を取得しますが、XSRF-TOKEN Cookieが存在し、リロードするたびにその値を維持します。

  • ローカルサーバーと新しいサーバーの両方がまったく同じgitブランチを実行しており、Apache 2.4、Laravel 5.4およびPHP 7.1を実行しているため、これを想定していますローカルとサーバーの両方がcentos 7を実行しています

  • すべてのリクエストがDBに新しいセッションを作成します。これは、get、post、およびajaxリクエストで発生します。

これはどこかからの設定の問題だと思いますが、私にはわからない、どんな助けも大歓迎です。それが役立つ場合、私の最初のページロードの応答ヘッダーの下を見てsidとlaravelセッションの両方が 'Set-Cookie'コマンドの下にありますが、実際にはローカルアプリケーションのCookieストレージに保存されません。

編集/更新だから、もともと私は自分が修正したと思ったことを言って自分の質問に答えましたが、この修正はもはや機能せず、この問題は至る所で発生しています。したがって、私の問題を更新することは以前と同じで、何かをしようとすると新しいセッションが作成され、数ページをリロードしてナビゲートすると、ajaxリクエストなどのアクティビティのために数十のセッションが追加されます。

私のセットアップはこれです、3つすべてがクローンイメージで実行されている3つのサーバーがありますが、それらは同一ですが、そのうちの1つはサブドメイン、development.mysite.comであり、他の2つはメインサイトmysiteの負荷分散されています.com。したがって、私が思いつく唯一の可能な説明は、何らかの理由でlaravelはサブドメインのためにセットアップを理解できないということです。envファイル(development.mysite。 com、.mysite.com、mysite.com、.development.mysite.comなど)およびホストに数十のオプションをすべて追加しましたが、これは何の役にも立ちません。

**編集/更新#2 **これに加えて、使用中のドメインがサブドメインであり、メインドメインもlaravelを実行していることに関連している可能性があることがわかりました。なぜ。

13
CMOS

これに対する解決策は2つの部分であることがわかりました。同じOSとセットアップであるため、なぜ変化したかはわかりません。

ステップ1 COOKIE_DOMAINが適切に設定されており、ポート番号がないことを確認します(.envで、または/config/session.phpで、どちらを使用しても)

ステップ2 /config/sessions.php内のCookie名( 'cookie' => 'whatever')にアンダースコアが含まれていないことを確認します。 Laravelは明らかにこれに問題があります。

5
CMOS

私たちもこのエラーを投げましたが、これが問題を解決しているようです:

storage/フォルダーに正しい権利があることを確認します

•ページ内のすべてのJavascriptを無効にし(ナビゲーターまたはコード内で無効にする)、'http_only' => true,

•httpsの有無にかかわらず使用してみてください

•SESSION_DRIVER変数がnullでないことを確認します

'encrypt' => false,'encrypt' => true,を切り替えてみてください

•Cookie名を変更しようとする'cookie' => 'laravelsession',

•SESSION_DOMAINを実際のドメインに設定してみてくださいOR null

• 'secure' => env( 'SESSION_SECURE_COOKIE'、false)と 'secure' => env( 'SESSION_SECURE_COOKIE'、true)を切り替えてみてください。

すべてのステップの後、このバグは修正されているように見えますが、どういうわけか、開発でもhttpsを使用するまで、ナビゲーターでcookieが設定されません。

100%の修正を提供できないことを残念に思いますが、まったく同じ問題を抱えているので、私の経験を皆さんと共有したいと思いました。

5
Mathieu Ferre

この問題の主な原因は、laravelがサーバー側でセッションデータを保存できないことです。

ファイルをセッションストレージとして使用すると、通常は権限の問題になる可能性があります。[centosを使用している場合はSELINUXを確認してください]、laravel(Apacheまたはnginxまたはプロセスを実行するユーザーを意味します)セッションファイルが保存されているフォルダー(通常はプロジェクトルート/ストレージフォルダー)の読み取りおよび書き込み権限が必要です。

これが発生するもう1つの理由は、データベースをセッションストレージとして使用し、セッションテーブルを手動で作成し、bigint(20)型のid列またはその他の不一致列を作成するミスを犯した場合です。

ここでも、laravelセッションデータを保存できませんでした。それについての詳細な回答をここで確認してください。 https://stackoverflow.com/a/45340647/7260022

そして最後のポイントは、上記のCookieとドメイン設定についてです。将来的に問題に苦しんでいる人のために問題を特定するのに役立つことを願っています。

1
Waku-2