2009年11月20日 過去Blog
Zencartのセッションについてですが、以下の環境に該当する場合は、少々対応が必要なようです。
  1. サーバが専用SSLではなく、共用のSSLを利用している。
  2. カスタマイズの際にURLをそのまま張り付けて使用している。
  3. 静的htmlへのリンクがZencartのサイト内に含まれている。
私の管理するZencartのサイトは上記の全てに当てはまっていました・・・orz 解決策の前にZencartのセッションの基本的な仕組みについて説明したいと思います。

Zencartのセッションの基本的な仕組み Zen Cart のセッション情報は、ログイン時に発行される一意の文字列 (zenid) で管理されます。 管理方法としては、初期設定ファイルの内の設定(*1)によって、データベースに一時的に収納されるか、または指定のディレクトリーにファイルとして保存され、セッションの推移に伴い随時、参照・更新されていきます。 zenid は、基本的にはブラウザのクッキー (Cookie) (期限設定無し)に保存されます。 勘違いしやすいのですが、これは管理画面内の「セッション管理の設定」>「クッキー使用の有効 (TRUE) / 無効 (FALSE)」 に関わらず、ブラウザのクッキーが許可されている場合は、クッキー (Cookie) を利用し zenid を引き継ぎ維持しようとします。この設定が有効 (TRUE) であればクッキー (Cookie) 使用が必須となり、ブラウザのクッキー (Cookie) が不許可の場合や、共用SSL サーバーなどでドメインが変更され、クッキー (Cookie) の引き継ぎが不可能な場合などは、zenid 発行時にクッキー (Cookie) の設定をオンにすることを促すメッセージ (index.php?main_page=cookie_usage) が表示されます。 また、「セッション管理の設定」>「クッキー使用の設定が無効 (FALSE)」 の設定で、ブラウザのクッキーが不許可、または、SSL サーバーなどでドメインが変更されるためクッキー (Cookie) の引き継ぎが不可能な場合などは、ブラウザに渡される URL に付け足される形で zenid を引き継ぎます。 この際、URL を呼び出すのに、zen_href_link() 等 Zen Cart のリンク関数を用いていれば関数内の処理で自動的に zenid 追加されますが、独自カスタマイズなどを加えていて直接 URL をベタ書きしている様な場合は、クッキー (Cookie) 不可環境での zenid の引き継ぎが不可能になり、ログイン状態が維持できなくなったりカートの内容が空になってしまう様な現象が現れます。 クッキー (Cookie) 不可環境に対応する、または SSL サーバーを別ドメイン名で運用する場合などは、前記「セッション管理の設定/クッキー使用」の設定を無効 (FALSE) としなければなりません。しかし、前記の様に zenid が URL に付加されるためセキュリティ上は好ましくありません。 このような場合は、「SSLセッションIDチェック」、「User Agentチェック」、「IPアドレスチェック」、「ロボット(スパイダー)のセッションを防止」、「セッション再発行」の各項目を有効 (TRUE) とし、セッションなりすまし防止等、セキュリティ対策をする必要があると思います。 以下、管理画面内のセッション管理の設定内の項目の説明です。 SSLセッションIDチェック 全てのHTTPSリクエストでSSLセッションIDをチェックしますか? User Agentチェック 全てのリクエスト時にUser Agentのチェックを行いますか? 同一セッションであったとしても、User Agentをチェックし、もし違えばセッション情報を破棄します。 セッションハイジャックの防止に有効です。 IPアドレスチェック全てのリクエスト時にIPアドレスをチェックしますか? 同一セッションであったとしても、IPアドレスをチェックし、もし違えばセッション情報を破棄します。 セッションハイジャックの防止に有効です。 ロボット(スパイダー)のセッションを防止 既知のロボット(スパイダー)がセッションを開始することを防止しますか? 対象となるロボット(スパイダー)のリストは、 includes/spiders.txt に記載されていますので、必要に応じて対象を追加してください。 セッション再発行 ユーザーがログオンまたはアカウントを作成した場合にセッションIDを再発行しますか?(PHP4.1以上が必要) セッションハイジャックの防止に有効です。 IPアドレス変換の設定 IPアドレスをホストアドレスに変換しますか?注意:サーバによっては、この設定でメール送信のスタート・終了が遅くなることがあります。 *1 インストール画面でキャッシュの保存方法をデータベースなどから選択する箇所がありますが、そこの設定に関係していると思います。(未検証) また、セッション情報をファイルで保存するには、設定ファイルを直接修正する必要があります。configure.php の下部にある define(‘SQL_CACHE_METHOD’, ‘none’);  を define(‘SQL_CACHE_METHOD’, ‘file’); に変更する事で有効になります。 この記事の最初に触れましたが、以下の問題の解決策を書きます。
  1. サーバが専用SSLではなく、共用のSSLを利用している。
  2. カスタマイズの際にURLをそのまま張り付けて使用している。
  3. 静的htmlへのリンクがZencartのサイト内に含まれている。

Zencartのセッションに関して、上記のトラブルの解決策

1.サーバが専用SSLではなく、共用のSSLを利用している。 共用SSLの場合は、SSLページとそれ以外のページで、ブラウザのクッキーに保存されるドメインが変わってしまうので、セッションが引き継げなくなってしまいます。(Zencatで共用SSLを利用する場合の説明はこちらで触れています。) その解決策として、管理画面内の「セッション管理の設定」>「クッキー使用の設定」をFalseにする必要があります。前述しましたが、これはクッキーを一切使用しないという意味ではありません。ブラウザのクッキーが使用できない場合は、URLにzenidを付与して、セッションを引き継ぐということです。 問題が共用SSLを使用している点だけであれば、ブラウザのクッキーが使用できない場合も含め、「クッキー使用」をFalseにするだけで対応できます。その際のセキュリティ低下を考えると、「SSLセッションIDチェック」、「User Agentチェック」、「IPアドレスチェック」、「ロボット(スパイダー)のセッションを防止」、「セッション再発行」の各項目を有効 (TRUE) とし、セッションなりすまし防止等、セキュリティ対策をする必要があると思います。 2.カスタマイズの際にURLをそのまま張り付けて使用している。 この場合は、クッキーの使えない環境も考慮し、カスタマイズの際に張り付けたリンク箇所をセッションが引き継がれるように、zen_href_link()などを利用し、修正する必要があります。 セッションを引き継ぐリンクの貼り方についてはこちらのページを参照してください。 3.静的htmlへのリンクがZencartのサイト内に含まれている。 この場合も、「2」の問題と同様に、クッキーの使えない環境も考慮し、カスタマイズの際に張り付けたリンク箇所をセッションが引き継がれるように、zen_href_link()などを利用し、修正する必要があります。 セッションを引き継ぐリンクの貼り方についてはこちらのページを参照してください。 引用元サイト : talking about …

この投稿へのコメント

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます。
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CAPTCHA


ピックアップ記事

[7.5] iPhoneアプリに背景画像を設置する

2010年12月06日 過去Blog
iPhoneアプリの背景に独自の画像をいれたい場合の説明です。デフォルトのままでも特に気にならない方も多いかもしれませんが、少し味気ないので、背景を設定してみましょう。 …
「[7.5] iPhoneアプリに背景画像を設置する」をはてなブックマークに追加

[3]:Interface Builder と Xcode を接続する方法

2010年11月30日 過去Blog
今回は、Interface Builder を使って、UITextField, UILabel, そして ボタンを配置し、Xcode で書いたコードと接続し、動作させてみます。 アプリケーションの仕様 ユーザーがテキストボックスをタップすると入力用のキーボードが表示される ユーザーは自分の名前(任意の文字列)を入力する 実行ボタンを押す ボタンを押すとラベルが、「Hello! ユーザー名!」のような表示に更新される もし、テキストボックスが空のまま実行されると、警告を表示させる …
「[3]:Interface Builder と Xcode を接続する方法」をはてなブックマークに追加

UIActionSheet を複数使った場合のメソッドの振り分け

2011年05月03日 過去Blog
1つのクラスファイル内で、複数のUIActionSheetを使う時はtagプロパティを使って、どのアクションシートのボタンがクリックされたのかを判別します。 actionsheet.tag = 1; 詳しくは以下のサイトを参照。 http://technical-iphone.blogspot.com/2010/05/uiactionsheet.html
「UIActionSheet を複数使った場合のメソッドの振り分け」をはてなブックマークに追加

php MySQL 2つのテーブルを縦に並べて結合(union)し、結果を抽出する

2010年03月30日 過去Blog
select c1,c2,c3 from A union all select c1,c2,c3 from B 参照元:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1115439551 divorce lawyer san diego…
「php MySQL 2つのテーブルを縦に並べて結合(union)し、結果を抽出する」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy