Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

現象

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」でセッションを開始しているのが駄目っぽい。

どう対応するか…

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away