共用SSLでのカートの中身が消えたりページの移動中にログインがはずれて

困った時はこちらで質問してください。回答を担当する人は特に決まっていませんので、分かる方は回答をお願いします。
アバター
kitagawa
記事: 95
登録日時: 2006/3/16 12:44
お住まい: 関西

共用SSLでのカートの中身が消えたりページの移動中にログインがはずれて

投稿記事by kitagawa » 2006/5/26 15:19

共用SSLでのショップの動作に問題があります。
どなたか対応をご存知の方おられないでしょうか。

zen-cart:zen-cart-v1.2.0-l10n-jp-6
MySQL 4.1.16
で、ショップを作成しています。

クッキーを使用せずに動作確認をしたときには、店舗内をあちこち移動しても問題がないようでした。ただ、IDがついて回るので、
http://zen-cart.jp/bbs/viewtopic.php?t=1488
を参考にして、一般設定>セッション>クッキーを使用をtrueにし、
同メニューのSSLセッションIDチェックもtrueにしました。

includes/functions/html_outpu.php の
// clean up the link before processing
の手前に
// Add the session ID when moving from HTTP to HTTPS server
if ( ($http_domain != $https_domain) && (SESSION_FORCE_COOKIE_USE == 'True') &&
($connection == 'SSL')) {
$sid = zen_session_name() . '=' . zen_session_id();
}

を追加しました。

これでIDがアドレスの後について回る現象がなくなったのですが、こちらの
http://zen-cart.jp/bbs/viewtopic.php?t=2342
のように、買い物の画面でレジに進むことができない状態になっています。
ログインせずに「カートに入れる」をクリックし、そのままレジに進もうとすると、通常は
ここで「サインインしてください」になると思うのですが、「カートの中身は空です」が表示されます。
次へをクリックしてもどこにも移動しないので、上のリンクで「ホーム」に戻ってログインしてから買い物籠を見ると、先ほどの商品が入っています。そのまま「購入手続きをする」をクリックして配送商法を選択し、次へをクリックすると、「いらっしゃいませ サインインしてください」と、ログインの画面が出てきてしまいます
その時、エラーメッセージが表示されるヘッダ部分に「エラー: メールアドレスまたはパスワードが一致しませんでした。」と表示されます。でも、ヘッダのバーに「ホーム│ログアウト│マイページ」と、ログインしたときに現れるバーが表示されます。

もう店舗内は全部SSLで動くようにしてしまいたいのですが、上司が「SSLは共用だから負荷が心配」と許可してくれません。

SSL関連のログも参考にいろいろ触ってみたのですが、現状打破にはいたりませんでした。
もうクッキーを使用せずに、IDがついて回るのを覚悟するしかないのでしょうか。
アバター
kino
記事: 893
登録日時: 2005/5/15 19:39
お住まい: 京都
連絡を取る:

Re: 共用SSLでのカートの中身が消えたりページの移動中にログインがはずれ

投稿記事by kino » 2006/5/26 15:21

木下です。

kitagawa さんが書きました:もう店舗内は全部SSLで動くようにしてしまいたいのですが、上司が「SSLは共用だから負荷が心配」と許可してくれません。


今時SSLの処理ぐらいでサーバーが過負荷になるとは考えにくいのですが・・・
-----
木下 敏夫
http://www.tktools.jp/

大阪府産業デザインセンターデザイン専門員 ( http://bmb.oidc.jp/index.php?topic=-m-D14 )
奥様ショップ 店長 ( http://okusama-shop.com/ )
電脳ドロップシッピング 店長 ( http://d-064.d-shipping.net/ )
アバター
k
記事: 28
登録日時: 2006/2/25 20:17

便乗申し訳ありません。

投稿記事by k » 2006/5/28 02:52

私も共用SSLでショップを作成中なのですが、kitagawaさん同様、クッキー使用のところでちょうど詰まっております。

IDが付いて回る、というのもなんとかしようと思っている点なのですが、http://zen-cart.jp/bbs/viewtopic.php?t=2318で紹介されている、「ログイン情報のダブり」がどうしても気にかかってしまいまして…。

こちらのトピックでは「同じ状況が再現できない」とのことですので、原因がクッキー使用やSSLセッションIDチェックにあるかどうかはわからないのですが、他に考えられる点もあまりないので、出来ればこちら2点はONにしたいと考えています。

ですが、クッキー使用をONにすると、kitagawaさんと同様の症状が出てしまいますので、どうしたもんかと悩んでおります :(

どなたか解決方法をご存知でしたら、ぜひご教授下さいm(_ _)m
アバター
kitagawa
記事: 95
登録日時: 2006/3/16 12:44
お住まい: 関西

投稿記事by kitagawa » 2006/5/30 10:24

kino様
レスありがとうございます。
SSLは店舗だけでなく、会社サイトの問い合わせとかほかにも使う予定とかで、負荷が心配だそうです。
一度どの程度の負荷まで耐えられるのか調べて見たいと思います。


最初の書き込みで、
その時、エラーメッセージが表示されるヘッダ部分に「エラー: メールアドレスまたはパスワードが一致しませんでした。」と表示されます。

という現象を書きましたが、何度か動作を検証した結果、クッキーを切ったときにも再現されるため、ログインボックスの表示などをいじった際に原因があるようです。過去ログによく似た現象があったため、SSLの問題と思い込んでいましたが、切り分けて考えます。

現在のカスタムテンプレートをはずし、別テンプレートで動作確認しようと思います。すみません。


k様
上記のとおり、「エラー: メールアドレスまたはパスワードが一致しませんでした。」のエラーは別問題のようです。紛らわしい書き込みすみませんでした。

ただ、ショップ内をログイン後たくさん移動すると、ログイン状態がおかしくなったりカートの中身の表示が変わったりしてしまうのは、上記とは関係ないかもしれないです。別のテンプレートで動作してみて、同じ現象がおこるかどうか検証してみます。
アバター
kitagawa
記事: 95
登録日時: 2006/3/16 12:44
お住まい: 関西

テンプレートをはずしてみました

投稿記事by kitagawa » 2006/5/30 11:48

現在のカスタムテンプレートをはずし、デフォルトのものにしたところ、「エラー:メールアドレスとパスワードが一致しません」はでなくなりました。
やはりテンプレートをいじったときにどこかやってしまっているようです。

ただ、テンプレート変更後も(クッキー使用・IDチェックオン)
ログイン後は買い物できるがログインしないでカートに入れたところ、通常は
  買い物かごに入れる⇒レジへ⇒ログイン画面が表示⇒ログイン後レジ
になるはず。だけど、
  買い物かごに入れる⇒レジへ⇒買い物かごは空です
になる という現象がおこります。

クッキー不使用にすると、IDがでるけどちゃんとログインの画面に移動でき、買い物までできます。
クッキー使用でセッションIDチェックをはずすにすると、やはり「かごの中身は空」とでてしまいました。

クッキー使用にするとカートの中身がログイン前だと空と表示されてしまい、レジに進めない状態です。あとはログイン後SSLと非SSLを移動するため?なのか、ログインしているのに「ログアウト│マイページ」などが表示されない現象が起きます。

上司に確認を取り、ショップ内はすべてSSLにしてもしょうがないということになりましたので、この状態で
http://zen-cart.jp/bbs/viewtopic.php?t=1487
でkinoさんがおっしゃってたfunction/html_output.phpのzen_href_linkを下記の様に修正、をやってみて検証をしたいと思います。
// The HTML href link wrapper function
// function zen_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true, $static = false, $use_dir_ws_catalog = true) {
function zen_href_link($page = '', $parameters = '', $connection = '', $add_session_id = true, $search_engine_safe = true, $static = false, $use_dir_ws_catalog = true) {
global $request_type, $session_started, $http_domain, $https_domain;

if (!zen_not_null($page)) {
die('</td></tr></table></td></tr></table><br /><br /><strong class="note">Error!<br /><br />Unable to determine the page link!</strong><br /><br />');
}

if ($connection == '') {
$connection = $request_type;
}

if ($connection == 'NONSSL') {
$link = HTTP_SERVER;
} elseif ($connection == 'SSL') {
if (ENABLE_SSL == 'true') {
$link = HTTPS_SERVER ;
} else {
$link = HTTP_SERVER;
}
} else {
die('</td></tr></table></td></tr></table><br /><br /><strong class="note">Error!<br /><br />Unable to determine connection method on a link!<br /><br />Known methods: NONSSL SSL</strong><br /><br />');
}


手探り状態で、問題の切り分けや原因確認に手間取ってしまっています。混乱した書き込みですみません。
kさん、参考にならない書き込みですみません。がんばります。
アバター
k
記事: 28
登録日時: 2006/2/25 20:17

投稿記事by k » 2006/5/30 13:01

kさん、参考にならない書き込みですみません。がんばります。


いえいえ、とんでもないです。
こちらこそ何もお役に立てませんで…。
SSLの問題に関しては、kinoさんがおっしゃっていた修正でたぶん解決すると思います(私のところでは、解決しました。kinoさんありがとうございます)。

ログイン後は買い物できるがログインしないでカートに入れたところ、通常は
  買い物かごに入れる⇒レジへ⇒ログイン画面が表示⇒ログイン後レジ
になるはず。だけど、
  買い物かごに入れる⇒レジへ⇒買い物かごは空です
になる という現象がおこります。


これがかなり大きな問題だと思うんですよね :(
初めてのお客様は、お買い物(かごに入れる)→アカウント作成という流れの方が多いような気がします。
会計に進む前に、かごの中身がクリアされてしまうと、もういいや :cry: という感じでやめてしまう方も多いんじゃないでしょうか。

現在はとりあえず、クッキー使用OFF、SSLセッションIDチェックONでやっていますが、上記の問題がなければ、やはりクッキーが使用できた方がいいですよね…。


クッキーを使いたい、と言いながらも、少し気になった点は(これは仕方ないのかもしれませんが)、クッキー使用をONにすると、クッキーがない初回のアカウント作成時に、クッキーの使用について云々縲怩ニいうメッセージが出てしまいますよね。
あまりPCに詳しくない人は、それだけで「ちょっとどうしようかな?」 という気持ちになってしまうような気がしないでもないかなぁと。
デフォルトのテンプレートに、わかりやすい文言を付け足したほうがいいかもしれませんね :roll:
アバター
k
記事: 28
登録日時: 2006/2/25 20:17

投稿記事by k » 2006/5/30 23:26

ちょっと気づいたことを追記(既出だと思いますが…)。

普段あまり意識してアドレスを見ていなかったのですが、クッキーを使わないと、アドレスの後に、zenid=hogehogeという形でセッションIDが付加されてしまうんですね :cry:

試しに「zenid」でGoogle検索してみたら、URLはセッションIDが付いたままクロールされているようです。
セキュリティ上、これはやはり好ましくないですよね。
どうしたもんでしょうか :(

カートが空になってしまうのは、非SSLとSSLのページ間でデータの受け渡しがうまくいってないのが原因でしょうか。
「お買い物ページを全部SSLにしてクッキーを利用する」のが手っ取り早いのかもしれませんね :?
アバター
k
記事: 28
登録日時: 2006/2/25 20:17

投稿記事by k » 2006/5/31 17:22

何度も申し訳ありません。

私のところでは、もう少しでうまくいきそうです :)
うまくいっていなかったのは、

includes/functions/html_outpu.php の
// clean up the link before processing
の手前に
// Add the session ID when moving from HTTP to HTTPS server
if ( ($http_domain != $https_domain) && (SESSION_FORCE_COOKIE_USE == 'True') &&
($connection == 'SSL')) {
$sid = zen_session_name() . '=' . zen_session_id();
}

を追加しました。


というところを、修正後アップロードしていなかっただけでした…。
お恥ずかしい話です…。

とりあえずセッションはつながるようになり、クッキー使用時でも買い物かご→レジへ進むの画面で、「カートの中身は空です」というメッセージは表示されなくなったのですが、URLを置き換える(現在のURLが、セッションIDが付加されたSSL用のURLに置き変わる)処理がなされて、そこで(クリックしたURLには飛ばず)終了してしまうようです。
もう一度、「レジへ進む」ボタンをクリックすると決済画面に進むことが出来るのですが、一度のクリックで「セッションIDを付加したSSL用のURLを生成&クリックしたURLにジャンプ」という処理が出来ればいいのですが…。

PHPは素人同然なのですが、もう少し調べてみます :?
#Header("Location: url");などを利用すればよいのかな?
アバター
kitagawa
記事: 95
登録日時: 2006/3/16 12:44
お住まい: 関西

ありがとうございました

投稿記事by kitagawa » 2006/6/01 11:30

いままでやったことのまとめです。
http://zen-cart.jp/bbs/viewtopic.php?t=1488
を参考にして、一般設定>セッション>クッキーを使用をtrueにし、
同メニューのSSLセッションIDチェックもtrueにしました。

includes/functions/html_outpu.php の
// clean up the link before processing
の手前に
// Add the session ID when moving from HTTP to HTTPS server
if ( ($http_domain != $https_domain) && (SESSION_FORCE_COOKIE_USE == 'True') &&
($connection == 'SSL')) {
$sid = zen_session_name() . '=' . zen_session_id();
}

を追加しました。

http://zen-cart.jp/bbs/viewtopic.php?t=1487
でkinoさんがおっしゃってたfunction/html_output.phpのzen_href_linkを変更
// The HTML href link wrapper function
// function zen_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true, $static = false, $use_dir_ws_catalog = true) {
function zen_href_link($page = '', $parameters = '', $connection = '', $add_session_id = true, $search_engine_safe = true, $static = false, $use_dir_ws_catalog = true) {
global $request_type, $session_started, $http_domain, $https_domain;

if (!zen_not_null($page)) {
die('</td></tr></table></td></tr></table><br /><br /><strong class="note">Error!<br /><br />Unable to determine the page link!</strong><br /><br />');
}

if ($connection == '') {
$connection = $request_type;
}

if ($connection == 'NONSSL') {
$link = HTTP_SERVER;
} elseif ($connection == 'SSL') {
if (ENABLE_SSL == 'true') {
$link = HTTPS_SERVER ;
} else {
$link = HTTP_SERVER;
}
} else {
die('</td></tr></table></td></tr></table><br /><br /><strong class="note">Error!<br /><br />Unable to determine connection method on a link!<br /><br />Known methods: NONSSL SSL</strong><br /><br />');
}

を行いショップ内では基本的にSSLからのリンクをすべてSSLに飛ぶようにしてみました。

結果、買い物や新規登録など、様々な動きをしてみましたが、何とか動いているようです。
SSLと非SSL環境の混在は、共用SSLだと難しいという結論になるかと思います。

問題の切り分けができない状態で書き込み、お騒がせしてすみませんでした。


k様
クッキーを使いたい、と言いながらも、少し気になった点は(これは仕方ないのかもしれませんが)、クッキー使用をONにすると、クッキーがない初回のアカウント作成時に、クッキーの使用について云々縲怩ニいうメッセージが出てしまいますよね。
あまりPCに詳しくない人は、それだけで「ちょっとどうしようかな?」 という気持ちになってしまうような気がしないでもないかなぁと。
デフォルトのテンプレートに、わかりやすい文言を付け足したほうがいいかもしれませんね

これに関しては、includes/languages/japanese/cookie_usage.php に、
この警告が出たお客様は、「次へ」をクリックし、もう一度ログイン・新規登録のリンクをクリックしてください。サインイン画面が表示ます。

という一文を挿入しました。でも、おっしゃるように警告が出ただけでびっくりなさる方もいらっしゃると思うので、できれば表示させたくないですね。
私のところでは、もう少しでうまくいきそうです

おお、おめでとうございます。

とりあえずセッションはつながるようになり、クッキー使用時でも買い物かご→レジへ進むの画面で、「カートの中身は空です」というメッセージは表示されなくなったのですが、URLを置き換える(現在のURLが、セッションIDが付加されたSSL用のURLに置き変わる)処理がなされて、そこで(クリックしたURLには飛ばず)終了してしまうようです。
もう一度、「レジへ進む」ボタンをクリックすると決済画面に進むことが出来るのですが、一度のクリックで「セッションIDを付加したSSL用のURLを生成&クリックしたURLにジャンプ」という処理が出来ればいいのですが…。

お客様はそこで「レジに進めない」とあきらめてしまうかもしれないですよね。 :cry:
素人同然なのでよくわからないのですが、「ある特定の動作をしたときにセッション情報が送れなくなる」という瞬間があるはずなので、そこを突き止めたらなんらかの対策ができないかと思ったのですが、そこから先が……。

今回の反省点は、ちまちまいじっているのと、ほかの担当者が平行して作業したのが災いして、どのファイルをいじった時点で、どの現象が起こることになったのか、を洗い出すのに時間がかかってしまったところです。
一応いじったところは記録していましたけど、複数の過去ログを参照していろいろやっていたので、この過去ログの改変をやったらうちの環境ではこうなる、という詳細な検証結果を記録しておかなかったのが痛かったです。
アバター
よっし
記事: 186
登録日時: 2005/5/19 19:08
お住まい: 佐賀市
連絡を取る:

投稿記事by よっし » 2007/3/05 11:06

みなさん、こんにちは。

私もkitagawaさんのトピと同じような状況
(共用SSLサーバー利用、クッキー=True、セッションIDチェック=Trueでレジに進めない)
に見舞われていましたが、この上のまとめレスと同じ方法で変更を行ったところ、
レジには進めるようになりました。
ありがとうございました。 :D


ただ、問題がまだ残っていて、

カートに商品が入っているときに、
ログインした状態で「ショッピングカート」のページへジャンプすると、
ログアウトしてしまって「カートが空です」の表示になってしまいます。
:cry:

これは、どのページ(SSL・非SSL関係なく)からジャンプしても
症状は同じです。

ただし、何か商品を「買い物カゴに入れる」操作をした場合には、
中身が入ったカートにちゃんと遷移します。
また、ログインしていない状態(ビジターカート)では
この症状は発生しません。

kitagawaさん、kさん、ほか同じ環境の皆様では、
このような症状はありませんでしょうか?

また、どなたか解決の糸口をご存知でしたら、お導きをお願いします。
posted by よっし
【サイト】レグナテック(商品カタログ)
【環境】zen-cart v1.3.8a MySQL v5.0.32 PHP v5.2.0
アバター
よっし
記事: 186
登録日時: 2005/5/19 19:08
お住まい: 佐賀市
連絡を取る:

投稿記事by よっし » 2007/3/06 08:26

自己レスです。

ただし、何か商品を「買い物カゴに入れる」操作をした場合には、
中身が入ったカートにちゃんと遷移します。


ここに注目して、カートのページには問題ないのでは?と思い、
ナビゲーションバーのリンクに注目したところ、
カートへのリンクが明示的に「NONSSL」になっていたので、
これを「SSL」に修正したところ、解決しました!! :D

具体的には、
includes/templates/マイテンプレート/common/tpl_header.phpの65行目あたり
<a href="<?php echo zen_href_link(FILENAME_SHOPPING_CART, '', 'NONSSL'); ?>"><?php echo HEADER_TITLE_CART_CONTENTS; ?></a>&nbsp;|&nbsp;<a href="<?php echo zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'); ?>"><?php echo HEADER_TITLE_CHECKOUT; ?>&raquo;</a>

NONSSLSSLに修正しました。
posted by よっし
【サイト】レグナテック(商品カタログ)
【環境】zen-cart v1.3.8a MySQL v5.0.32 PHP v5.2.0

“Zen Cart 質問コーナー” へ戻る