[解決済み] Sessionの問題?(カートが空になったり1個になったりする)

2012 年 2 月 20 日

ホーム フォーラム 使い方全般 [解決済み] Sessionの問題?(カートが空になったり1個になったりする)

このトピックには16件の返信が含まれ、5人の参加者がいます。4 年、 6 ヶ月前 icon さんが最後の更新を行いました。

15件の投稿を表示中 - 1 - 15件目 (全17件中)
  • 投稿者
    投稿
  • #51326

    go
    参加者

    はじめまして、

    CoreserverにてWelcartでショップイング差止を作らせて頂きました。

    guestの状態で商品をカートに入れて、ホームに戻ったりカートに行ったりすると

    カートが空になったり追加した商品が表示されたりします。

    2商品入れると、今入れた1商品だけ表示されたり、前に入れた商品が表示されたりします。

    カートを何回か押すと、正常表示・空・1商品だけなど繰り返します。

    ログインしてカートを見たりホームに行ったり違うページに行くとguestになったり、

    会員が表示されたりします。

    共有SSL環境でこういう事例があったのでなんとか自力で直そうと思いましたが解決できませんでした。

    共有SSL環境・SSLを使わない環境ともに同様の症状が起きます。

    多分セッションがうまく読めたり読めなかったりしている状態だと思います。

    同じサーバーに2つショップを作りましたが同様な状態です。

    大変お手数ですがよろしくお願いいたします。

    同じCoreserverで複数のWelcartを設置しました。


    WordPress のバージョン:3.3.1

    Welcart のバージョン:1.1.2

    ご利用のテーマ:defaultとCloth 3 Columns

    症状を確認したブラウザ:IE,Firfox,Chrome

    サーバー(会社名、サービス名):Coreserver

    SSLの利用: 無し と 共用SSL 同様の症状

    WordPress のパーマリンク設定:defaultと/%category%/%postname% 同様の症状


    .htaccess


    php_value session.save_path /virtual/xxx/public_html/xxx.com/session

    php_value session.name SES1

    php_value session.cookie_lifetime 3600

    <IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteBase /

    RewriteRule ^index.php$ – [L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . /index.php [L]

    </IfModule>


    フォルダを手動で作る

    /virtual/xxx/public_html/xxx.com/wp-content/uploads

    /virtual/xxx/public_html/xxx.com/session

    両方ともパーミッション 707

    テーマのfunctions.phpに追加


    add_filter(‘usces_sessid_force’, ‘my_sessid_force’);

    function my_sessid_force( $notuse ){

    if (!empty($_SERVER)) {

    return $_SERVER;

    }

    return $_SERVER;

    }


    ●片方のサイトだけ

    /virtual/xxx/public_html/xxx.net/wp-adminに以下を設置

    .htaccess


    # 画像・ファイルアップロード

    <files async-upload.php>

    AddHandler application/x-httpd-phpcgi .php

    </files>

    # プラグイン・テーマ 新規インストール/アップグレード

    <Files update.php>

    AddHandler application/x-httpd-phpcgi .php

    </Files>

    # 本体アップグレード

    <Files update-core.php>

    AddHandler application/x-httpd-phpcgi .php

    </Files>


    php.ini


    session.save_path = /virtual/xxx/public_html/xxx.net/session


    上記を設定してもまだ 外観>ウェジェットのWelcartポストなどをサイドメニューに

    追加すると以下のようなエラーがでます。

    ブラウザをリロードすると正常に表示されます。


    Warning: Unknown: open(/tmp/sess_0c22fac2c13ffecfd683c51ae593b87c, O_RDWR) failed: Permission denied (13) in Unknown on line 0

    Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0


    もう片方のサイトはなにをしたのか?wp-adminになにも設置しなくても正常でエラーもでません。

    #63883

    nanbu
    参加者

    こんにちは。

    エラーを見ると、セッションファイルを見に行っているパスが指定している物と違うようですね。session.save_pathの指定が間違っていないでしょうか。またそのフォルダのパーミッションはどうなっていますでしょうか。

    #63884

    go
    参加者

    ありがとうございます。

    session.save_pathの指定は、

    /virtual/xxx/public_html/xxx.com/

    の.htaccessで

    php_value session.save_path /virtual/xxx/public_html/xxx.com/session

    このように設定しました。

    また、sessionフォルダはパーミッション707にしました。

    サイトのトップディレクトリでsession.save_pathを指定してるのに、セッションが切れるのでおかしい感じですが。

    #63885

    shika
    参加者

    気になるので以下のコードで指定フォルダにセッションファイルが生成されるか調べてみました。(サーバーはXREA+)

    ちなみに、WordPressをインストールせずに素の状態です。

    session_start();
    echo $_SESSION['count'] = intval($_SESSION['count']) + 1;
    echo '<br />'.session_save_path();

    1. .htaccessでパスを指定 ×
    2. session_start() 前に session_save_path(‘パス’)で指定 ○
    3. session_start() 前に ini_set(‘パス’)で指定 ○

    という結果になりました。

    .htaccessで指定する方法はうまく行かないようです。

    試していませんが、以下のコードでならいけるかもしれません。

    add_action('init', 'my_session_save_path');
    function my_session_save_path() {
    session_save_path('/virtual/xxx/public_html/xxx.com/session');
    }

    #63886

    go
    参加者

    こんにちは、

    Sessionフォルダを見ながらカートに追加したところ、

    セッションが複数できました。

    1個入れるごとに1つのセッションができるようです。

    1つ入れてすぐにもう一つ商品を入れると新しいセッションができるようです。商品が2個になる場合もありますが、たいてい1個です。

    セッションは、2個から4個くらいになります。

    サイト自体は、おととい設置したばかりなので誰もアクセスしてこないと思います。

    カートを何度かリロードしたりカートのリンクを押していると、

    「只今、カートに商品はございません。」

    と表示されるときには、セッションを使っていないようです。

    複数のセッションができるということで、商品を追加するたびに新しいセッションを追加しようとしているようなので、

    サイトのトップディレクトリの.htaccessに

    php_value session.auto_start Off

    を追加しましたが変化なしです。

    もう少し調べてみます。

    #63887

    go
    参加者

    shikaさん ありがとうございます。

    WordPressを使わないで、単独で

    session_start();
    echo $_SESSION['count'] = intval($_SESSION['count']) + 1;
    echo ''.session_save_path();

      をするとたしかに.htaccessではうまくカウントアップしませんでした。

      ini_set(“session.save_path”, “/virtual/xxx/public_html/xxx.net/session/”);

      を入れてやるとうまくいきました!

      これは解決かな?!と思いWordPressのファイルに

      ini_set(“session.save_path”, “/virtual/xxx/public_html/xxx.net/session/”);

      を設置しましたが、結果はうまくいきませんでした・・・

      /virtual/xxx/public_htm/wp-config.php

      /virtual/xxx/public_htm/index.php

      /virtual/xxx/public_htm/wp-content/plugins/usc-e-shop/classesusceshop.class.php

      この3つに

      ini_set("session.save_path", "/virtual/xxx/public_html/xxx.net/session/");
      echo $_SESSION['count'] = intval($_SESSION['count']) + 1;
      echo ''.session_save_path();

      を設置して試してみました。

      結果は3つともうまくいきませんでした。

      まず、カートの中に商品を入れてホームに戻ってもう一度カートを見ると空になります。

      session_save_pathは正常に表示されるもの、$_SESSIONはずっと1のままです。何度カートに入れても1のままです。

      あとini_setを設置した状態で、共有SSLにするとカートのリンクを何回か押すとたまにuscesidの値が変わります。

      次に、php.iniを

      /virtual/xxx/public_htm/

      に設置しました。

      [Session]
      session.save_path = "/virtual/poro/public_html/xxx.net/session/"

      /virtual/xxx/public_htm/wp-config.php

      に以下を設置しました。

      echo $_SESSION['count'] = intval($_SESSION['count']) + 1;
      echo ''.session_save_path();

      結果1が表示され、session_save_pathが表示されません。

      もう少し調べてみます。

    #63888

    nanbu
    参加者

    go さん

    まずは、WelcartをDevelopment Version にアップグレードしてみていただけますでしょうか。現在のバージョンは、1.1.2.1202202です。

    ini_set("session.save_path", "/virtual/xxx/public_html/xxx.net/session/");

    は、wp-config.phpに、

    echo $_SESSION['count'] = intval($_SESSION['count']) + 1;
    echo ''.session_save_path();

    は、テーマのヘッダテンプレートheader.phpに置いてテストしてください。

    またこのすぐ後に、phpinfo()を置いて現在の状況がどうなっているか確認してみてください。

    #63889

    go
    参加者

    nanbuさん ありがとうございます。

    まず、nanbuさんのご指導どおりに設定させていただきました。

    共有SSLでやると、ホームとかサイトマップに行くたびにカウントアップされておおお!これは、

    という感じでしたが・・・

    カートに商品を入れるとカウントが1になります・・・

    共有SSLを外すとカウントが順調に上がっていって!

    複数商品OK、セッション切れることなく正常動作確認できました!

    共有SSLがまたネックになるようです。

    まだちょっとしか調べてないのでもう少し調べてみます。

    #63890

    go
    参加者

    phpinfo();を設置して調べてみると共有SSLとhttpにクッキーの違いがありました。

    PHP Variables

    共有ssl

    _COOKIE[“uk4f4058bdb6817”] 3l48sj2op2bkajo0e8vjhuhpf1

    _COOKIE[“uk4f404ff300754”] s9ea1k2u8i4fip90229a02lqe7

    http

    _COOKIE[“uk4f4058bdb6817”] l7iv70gsrj8fq3l68nc7pp6jc4

    _COOKIE[“admuk4f4058bdb6817”] kksgcbko2bg88en0norsf271d6

    クッキーは、uk4f4058bdb6817ですが、読み込んでるセッションが違うみたいです。

    3l48sj2op2bkajo0e8vjhuhpf1は、実際には、

    /virtual/xxx/public_htm/xxx.net/sessionフォルダに、

    sess_3l48sj2op2bkajo0e8vjhuhpf1

    で保存されています。同様に、httpのuk4f4058bdb6817も

    sess_l7iv70gsrj8fq3l68nc7pp6jc4

    で保存されていました。

    なので、共有SSLとHTTPとセッションが別れて保存されるようです。

    ただ、以前のようにセッションが何個も作られるわけではないので解決に近づいたと思います。

    もう少し調べてみます

    #63891

    go
    参加者

    おはようございます。

    共有SSLへsession_idが引き渡せないのは、

    最初に、共有SSLに入った時、$sessidが空になるのが原因のようです。

    wp-content/plugins/usc-e-shop/classes/usceshop.class.php

    で、5830行くらいの、

    function uscesdc( $sessid )に$sessidを通すと値が空になります。

    共有SSLにアクセスしたときは、session_idが空の状態で、session_startしますので、新しいsession_idができてしまっているようです。

    もう少し調べてみます。

    #63892

    nanbu
    参加者

    現状のパーマリンク設定が、/%category%/%postname% でしたら、

    /%category%/%postname%/ に変更してみていただけますでしょうか。

    #63893

    go
    参加者

    nanbuさん ありがとうございます。

    パーマリンクはデフォルトでテストしていました。

    /%category%/%postname%/に変更しても変化はありませんでした。

    一応、仮に解決したのは、

    wp-content/plugins/usc-e-shop/classes/usceshop.class.php

    の5830行くらい

    function uscesdc( $sessid )

    の以下をコメントアウトしました。


    /*if( 'acting' !== $addr && 'mobile' !== $addr && $postfix !== $addr ) {
    $sessid = '';
    return NULL;
    }*/

    これで、共有SSLとHTTPを行き来してもセッションが切れることなくカートが正常に動くことができました。

    ちなみに、$addrという変数ですが、

    共有SSL初回アクセスですと値は空で、

    2回目以降は値はIPアドレスになっていました。

    とりあえず上記をコメントアウトした状態で使用したいと思います。

    少しテスト運用してみますね。

    皆様ご指導ありがとうございました。

    #63894

    nanbu
    参加者

    すみません、Coreserverをお使いでしたね。こちらをご覧ください。

    http://support.welcart.com/133/

    #63895

    go
    参加者

    nanbuさん ありがとうございます。

    そうですね。すでに解決済でした。

    追記をしたら正常に動きだしました!

    ありがとうございました。

    #63896

    icon
    参加者

    お世話様です、私もXREAでテストページを作成しているのですが、カートに商品を複数入れても1つだけしか入らない、お客様情報を入れる段階で真っ白なページ(空白)になります。具体的にどのようにすればよろしいのでしょうか?お教えいただければありがたいです。

    http://support.welcart.com/133/

    の「フィルターに適用」とありますが、どこに適用すればいいのかわかりません。

15件の投稿を表示中 - 1 - 15件目 (全17件中)

このトピックに返信するにはログインが必要です。