現象
Chrome は問題が発生しないが、Safari、Firefox の場合、一度ページを表示し、他のページに遷移すると、セッションのエラーとなり、どのページも表示できなくなる。
Cookie を一旦削除して、セッションIDを破棄すると、再度1回のみ表示可能となる。
以下エラーの内容。
Whoops, looks like something went wrong.
1/1 RuntimeException in NativeSessionStorage.php line 140: Failed to start the session: already started by PHP ($_SESSION is set).
in NativeSessionStorage.php line 140
at NativeSessionStorage->start() in NativeSessionStorage.php line 262
at NativeSessionStorage->getBag('attributes') in Session.php line 121
at Session->remove('_security_customer') in ContextListener.php line 132
at ContextListener->onKernelResponse(object(FilterResponseEvent), 'kernel.response', object(TraceableEventDispatcher))
at call_user_func(array(object(ContextListener), 'onKernelResponse'), object(FilterResponseEvent), 'kernel.response', object(TraceableEventDispatcher)) in WrappedListener.php line 61
at WrappedListener->__invoke(object(FilterResponseEvent), 'kernel.response', object(EventDispatcher))
at call_user_func(object(WrappedListener), object(FilterResponseEvent), 'kernel.response', object(EventDispatcher)) in EventDispatcher.php line 164
at EventDispatcher->doDispatch(array(object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener)), 'kernel.response', object(FilterResponseEvent)) in EventDispatcher.php line 53
at EventDispatcher->dispatch('kernel.response', object(FilterResponseEvent)) in TraceableEventDispatcher.php line 112
at TraceableEventDispatcher->dispatch('kernel.response', object(FilterResponseEvent)) in HttpKernel.php line 185
at HttpKernel->filterResponse(object(Response), object(Request), '1') in HttpKernel.php line 167
at HttpKernel->handleRaw(object(Request), '1') in HttpKernel.php line 66
at HttpKernel->handle(object(Request), '1', true) in Application.php line 543
at Application->handle(object(Request)) in Application.php line 520
at Application->run() in index.php line 7
src/Eccube/Framework/SessionFactory/UseCookieSessionFactory.php:initSession()
内のセッション名が指定されている部分をコメントアウトすると、Safari、Firefox でもセッションエラーが発生しない。
src/Eccube/Framework/SessionFactory/UseCookieSessionFactory.php
//session_name('ECSESSID');
ただ、Chrome でも Cookie を削除すると、同じく1回目のアクセスしか表示されない。
- ブラウザの Cookie を削除
- サイトにアクセスすると表示され、「ECSESSID」が Cookie に保持されている
- ページ遷移しようとすると、セッションでのエラー表示される。
- セッション名指定処理をコメントアウト
- 他のページへの遷移も確認できる
- Cookie は、「ECSESSID」、「PHPSESSID」の両方がセットされている
- 「ECSESSID」の Cookie を削除しても、そのまま正常に画面遷移可能
どうも、セッションは php デフォルトの「PHPSESSID」で継続している感じ。
ただ、初回セッション開始時に「ECSESSID」でセッションを開始しているのが駄目っぽい。
どう対応するか…