LoginSignup
4
4

More than 5 years have passed since last update.

EC-CUBE3のセッションの問題?!

Posted at

現象

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回目のアクセスしか表示されない。

  1. ブラウザの Cookie を削除
  2. サイトにアクセスすると表示され、「ECSESSID」が Cookie に保持されている
  3. ページ遷移しようとすると、セッションでのエラー表示される。
  4. セッション名指定処理をコメントアウト
  5. 他のページへの遷移も確認できる
  6. Cookie は、「ECSESSID」、「PHPSESSID」の両方がセットされている
  7. 「ECSESSID」の Cookie を削除しても、そのまま正常に画面遷移可能

どうも、セッションは php デフォルトの「PHPSESSID」で継続している感じ。
ただ、初回セッション開始時に「ECSESSID」でセッションを開始しているのが駄目っぽい。

どう対応するか…

4
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4