Blog

ブログ

ECCUBE3でセッションが切れる?

eccube.CRITICAL: RuntimeException: Failed to start the session (uncaught exception) at /var/www/eccube/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php line 149 {“exception”:”[object] (RuntimeException(code: 0): Failed to start the session at /var/www/eccube/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php:149)”} []

システムエラー画面になってシステムログにはこんなエラーがでていた。

apacheエラーログは以下の通り。

PHP Warning:  session_start(): Failed to decode session object. Session has been destroyed in /var/www/eccube/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php on line 148

セッションオブジェクトをデコードできないってことなので、とりあえずセッションのデータを見てみることに。

結論から言うと、セッションデータがでかすぎて欠落した値がDBに保存されていたことが原因。

eccube3.0.8だったのでセッションはデフォルトでDBに保存される。(3.0.10ではファイルに変更されている模様)

解決策としては

  1. dtb_session.sess_dataの型をblobからmediumblobに変更
  2. 保存先をファイルに変更

が考えられるので今回は1で対応。

因に、my.cnfに「sql_mode=STRICT_TRANS_TABLES」を設定するとblobのままでも欠落した値が挿入されることは無く、

(恐らく値が更新されないので)上記エラーは起きなかった。

そもそも、セッションにCustomerエンティティとそこから紐づくエンティティが保存されるらしく、

それを知らずにリレーションしまくると大変なことになりそう。

(今回はカスタマイズでいろいろリレーションしていた)

紐づくエンティティーでも保存される物とされない物があり良くわからんのですが・・・

引き続き調査は続く。

EC2のmysqlが落ちた

ブログを書こうと思ってアクセスしたら「データベース接続確立エラー」でサイトを開けず。

mysqlが落ちてたので起動したがまたすぐに落ちてしまった。

EC2のスワップ領域を設定すると良い、という記事を見つけたのでそれを参考に設定してみるものの、またすぐに落ちる。

アクセスログを見たところ、xmlrpc.phpへの大量アクセスがあることが判明。

下記サイトを参考に不正なアクセスを拒否してとりあえず解決。

サーバーが高負荷の原因はWordPressのxmlrpc.phpを狙った攻撃だった

何かしら監視ツールをいれやう。

 

vagrantの同期ディレクトリでパーミッションを変えられない

あ、しまった!

ブログ用意しておいてまったく書いてない。

ということでちょっと技術メモ的なことを書いてみる。

 

Vagrantファイルで以下の設定をすれば変えられる。typeをnfsにする。

config.vm.synced_folder "src/", "/var/www", type:"nfs"

追記
nfsだとパーミッションは自由に変えられるものの、所有者とオーナーがホストOSのものになってしまう。
なのでやっぱり下記設定のほうが良さそう。

config.vm.synced_folder "src/", "/var/www", owner:"vagrant", group:"vagrant", mount_options:["dmode=775","fmode=775"]

こんな感じにして、apacheもvagrantユーザーで起動することにしました。