PHPでセッションを完全に破棄する
<?php
// セッション変数を全て解除する
$_SESSION = array();
// セッションを切断するにはセッションクッキーも削除する。
// Note: セッション情報だけでなくセッションを破壊する。
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(),…
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’); に変更する事で有効になります。
この記事の最初に触れましたが、以下の問題の解決策を書きます。
- サーバが専用SSLではなく、共用のSSLを利用している。
- カスタマイズの際にURLをそのまま張り付けて使用している。
- 静的htmlへのリンクがZencartのサイト内に含まれている。
- サーバが専用SSLではなく、共用のSSLを利用している。
- カスタマイズの際にURLをそのまま張り付けて使用している。
- 静的htmlへのリンクがZencartのサイト内に含まれている。
この投稿へのコメント