[解決済み] Sessionの問題?(カートが空になったり1個になったりする)
-
投稿者投稿
-
2012年2月20日 10:44 PM #51326go参加者
はじめまして、
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になにも設置しなくても正常でエラーもでません。
2012年2月21日 2:47 AM #63883nanbuキーマスターこんにちは。
エラーを見ると、セッションファイルを見に行っているパスが指定している物と違うようですね。session.save_pathの指定が間違っていないでしょうか。またそのフォルダのパーミッションはどうなっていますでしょうか。
2012年2月21日 9:40 PM #63884go参加者ありがとうございます。
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を指定してるのに、セッションが切れるのでおかしい感じですが。
2012年2月22日 1:00 AM #63885shika参加者気になるので以下のコードで指定フォルダにセッションファイルが生成されるか調べてみました。(サーバーはXREA+)
ちなみに、WordPressをインストールせずに素の状態です。
session_start();
echo $_SESSION['count'] = intval($_SESSION['count']) + 1;
echo '<br />'.session_save_path();- .htaccessでパスを指定 ×
- session_start() 前に session_save_path(‘パス’)で指定 ○
- 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');
}2012年2月22日 1:11 AM #63886go参加者こんにちは、
Sessionフォルダを見ながらカートに追加したところ、
セッションが複数できました。
1個入れるごとに1つのセッションができるようです。
1つ入れてすぐにもう一つ商品を入れると新しいセッションができるようです。商品が2個になる場合もありますが、たいてい1個です。
セッションは、2個から4個くらいになります。
サイト自体は、おととい設置したばかりなので誰もアクセスしてこないと思います。
カートを何度かリロードしたりカートのリンクを押していると、
「只今、カートに商品はございません。」
と表示されるときには、セッションを使っていないようです。
複数のセッションができるということで、商品を追加するたびに新しいセッションを追加しようとしているようなので、
サイトのトップディレクトリの.htaccessに
php_value session.auto_start Off
を追加しましたが変化なしです。
もう少し調べてみます。
2012年2月22日 4:43 AM #63887go参加者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が表示されません。
もう少し調べてみます。
2012年2月22日 5:27 AM #63888nanbuキーマスター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()を置いて現在の状況がどうなっているか確認してみてください。
2012年2月22日 6:18 AM #63889go参加者nanbuさん ありがとうございます。
まず、nanbuさんのご指導どおりに設定させていただきました。
共有SSLでやると、ホームとかサイトマップに行くたびにカウントアップされておおお!これは、
という感じでしたが・・・
カートに商品を入れるとカウントが1になります・・・
共有SSLを外すとカウントが順調に上がっていって!
複数商品OK、セッション切れることなく正常動作確認できました!
共有SSLがまたネックになるようです。
まだちょっとしか調べてないのでもう少し調べてみます。
2012年2月22日 7:41 AM #63890go参加者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とセッションが別れて保存されるようです。
ただ、以前のようにセッションが何個も作られるわけではないので解決に近づいたと思います。
もう少し調べてみます
2012年2月23日 12:07 AM #63891go参加者おはようございます。
共有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ができてしまっているようです。
もう少し調べてみます。
2012年2月23日 2:15 AM #63892nanbuキーマスター現状のパーマリンク設定が、/%category%/%postname% でしたら、
/%category%/%postname%/ に変更してみていただけますでしょうか。
2012年2月23日 3:11 AM #63893go参加者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アドレスになっていました。
とりあえず上記をコメントアウトした状態で使用したいと思います。
少しテスト運用してみますね。
皆様ご指導ありがとうございました。
2012年2月24日 7:00 AM #63894nanbuキーマスターすみません、Coreserverをお使いでしたね。こちらをご覧ください。
2012年2月24日 4:00 PM #63895go参加者nanbuさん ありがとうございます。
そうですね。すでに解決済でした。
追記をしたら正常に動きだしました!
ありがとうございました。
2013年4月28日 4:13 PM #63896icon参加者お世話様です、私もXREAでテストページを作成しているのですが、カートに商品を複数入れても1つだけしか入らない、お客様情報を入れる段階で真っ白なページ(空白)になります。具体的にどのようにすればよろしいのでしょうか?お教えいただければありがたいです。
http://support.welcart.com/133/
の「フィルターに適用」とありますが、どこに適用すればいいのかわかりません。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。