17

私は自分でphp7をコンパイルしました(974f6c2a705)。symfony を使用して php7 + php-fpm + nginx を実行すると、次のエラーが発生します。

(セッションに snc redis バンドルを使用:)

 Warning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/tmp)

(ネイティブセッションサポートを使用:)

 Warning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/[...]/app/cache/dev/sessions)

phpにはフォルダーへの読み取り/書き込みアクセスがあるため、問題はsymfonyに関連しているようです。

このコードだけを実行すると、動作します:

session_start();
$_SESSION['x'] = 4234;
session_write_close();

symfony がセッションの書き込みに失敗する理由について何か提案やアイデアはありますか?

4

4 に答える 4

11

PHP7 では、カスタム セッション ハンドラーのセッション処理がより厳密になっています。Symfony の書き込みメソッドのカスタム セッション ハンドラーは、何らかの理由で false を返します。以前はこれによりエラーが発生しませんでしたが、現在は発生しています。

どのカスタム セッション ハンドラーを使用しているかについての情報はあまりないため、可能であれば別のカスタム セッション ハンドラーを設定することをお勧めします。

Symfony のさまざまなセッション ハンドラーを次に示します。Memcache のものと WriteCheckSessionHandler を除いて、それらのほとんどは明示的に true を返すようです。

https://github.com/symfony/symfony/tree/582f4753a343f230fbe18b4e9a0747d48351ddfb/src/Symfony/Component/HttpFoundation/Session/Storage/Handler

編集:

Snc Redis Bundle セッション ハンドラーについて言及されていますが、最新バージョンを使用していると確信していますか? 1 年前に、書き込み時に常に true を返すように変更されました。

https://github.com/snc/SncRedisBundle/blob/master/Session/Storage/Handler/RedisSessionHandler.php

アップデート

PHP にバグを送信して、将来のバージョンでより有用なエラー メッセージを見つけられるかどうかを確認しました (バグ レポートに投票するか、コメントを残してください)。

https://bugs.php.net/bug.php?id=71070

于 2015-12-07T05:53:12.313 に答える
5

一部の検索結果でエラー メッセージがリストの一番上に表示され、Symphony を使用していないためにこのスレッドを見つけた場合、これは私の場合に発生しました。セッション ハンドラの書き込みメソッドが を返すことを確認してくださいbool - true on success

php session_set_save_handlerのドキュメントには、これについて言及されていません。ただし、SessionHandlerInterfaceのドキュメントには次のように記載されています。

戻り値 (通常、成功した場合は TRUE、失敗した場合は FALSE)。この値は、処理のために PHP に内部的に返されることに注意してください。

以前のバージョンの PHP では、何も返さなくてもエラーにはなりませんでした。PHP 7.0 以降、何も返さないと次のエラーが発生しますWarning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/tmp)

PHP の将来のバージョンでは、もう少し明確なメッセージが表示されるようです。Failed to write session data using user defined save handler.

Symphony を使用している場合 - Chris Banks からの回答は、元の問題に対するより完全で有用な解決策を提供します。

于 2016-03-29T12:09:19.350 に答える