【ZenCart覚書】サーバ移転後にsession cacheのエラー

2011年8月22日

現象

サイト上方と管理画面に、このようなエラーメッセージが。
管理画面はこの表記のみでログイン枠でず。ぎゃー。

Warning: session_start() [function.session-start]: open([移転前のcatalogディレクトリへのパス]cache/sess_[英数字の羅列], O_RDWR) failed: No such file or directory (2) in [移転後のcatalogディレクトリへのパス]includes/functions/strict_sessions.php on line 105

Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at [移転後のcatalogディレクトリへのパス]includes/functions/strict_sessions.php:105) in [移転後のcatalogディレクトリへのパス]includes/functions/strict_sessions.php on line 105

Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at [移転後のcatalogディレクトリへのパス]includes/functions/strict_sessions.php:105) in [移転後のcatalogディレクトリへのパス]includes/functions/strict_sessions.php on line 105

Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id – headers already sent in [移転後のcatalogディレクトリへのパス]includes/functions/strict_sessions.php on line 108

Warning: Cannot modify header information – headers already sent by (output started at [移転後のcatalogディレクトリへのパス]includes/functions/strict_sessions.php:105) in [移転後のcatalogディレクトリへのパス]includes/init_includes/init_templates.php on line 78

解決法:DB(MySQL)の設定表記を書き換えました~

configure.phpは全て書き換えたのに、
移転前のパスが出てくるのはヘンだなぁと思って調べていたら、
DB側で設定されているということがわかりました。

参考:★webメモ: php zencartセッション保存先エラー対応

●確認SQL
% select configuration_value,configuration_key from configuration where configuration_key = “SESSION_WRITE_DIRECTORY” ;

●解決方法
以下を実行して、自分のセッションを保存したいディレクトリを指定した。
% update configuration set configuration_value = “ディレクトリ名”
 where configuration_key = “SESSION_WRITE_DIRECTORY”;

上の方はコマンドでやってるみたいで、よくわからなかったので、
私はダンプしたDB内に表記されてるところがあるんじゃないかと思って
探したらやっぱりありました。
『configuration』の項目内です。

(259, ‘セッション情報保存ディレクトリ’, ‘SESSION_WRITE_DIRECTORY’, ‘[移転前のcatalogディレクトリへのパス]cache’, ‘セッション管理がファイルベースの場合に保存するディレクトリを設定します。’, 15, 1, NULL, ‘2008-09-25 16:03:20’, NULL, NULL);

ここが移転前のパスになっていたら、移転後のパスに書き換えればOKです。

phpmyadminでも書き換えられます。
上の上方から行くと、『configuration』の259行目ですね。

余談ですが、『sessions』という項目もあるので、
最初こっちを空にしたりとか色々いじくってたのですが、
こちらの項目は関係なかったです。
名前が似てるからってだまされちゃダメだ(ーー;

結局関係なかったがその他に試してみたこと。

結局関係なかったのですが、今後なんかあったときのためにメモ。

php5の環境でzen cartをインストールすると出るエラー | NIPPON MODE BGS-WORKS

strict_sessions.phpの55行目あたり

function _sess_write($key, $val) {
global $db;
global $SESS_LIFE

を以下のように書き換える。

function _sess_write($key, $val) {
// The following is only to work around a PHP 5.2.0 bug:
global $db; if (!is_object($db)) {
//PHP 5.2.0 bug workaround …
$db = new queryFactory();
$db->connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE, USE_PCONNECT, false);
}
global $SESS_LIFE;

STORE_SESSIONSの書換え

インストール後、「警告: セッション・ディレクトリが存在しません: /tmp. セッションを利用するためにディレクトリを作成してください。」という警告が表示される。

これはosCommerceの現象みたいなのですが、
configure.phpに似たような表記があったので、関係あるのかなぁと思って、
両方のconfigure.phpの中の

  define('STORE_SESSIONS', ''); // leave empty '' for default handler or set to 'db'

  define('STORE_SESSIONS', 'mysql'); // leave empty '' for default handler or set to 'mysql'

と書き換えてもみたのですが、特に変りなかったので、元に戻しました。
よくよく考えると、元々mysqlの設定を読み込んでるのだから、これは関係ないね。