2011-07-05 5 views
2

私はちょうどいくつかの新しいサーバースペースを購入し、私の他のサーバーでうまく動作する非常に単純なPHPアプリケーションをそれに移行しています。PHPセッションがページ間で保存されない

何らかの理由で、セッションデータが新しいサーバーのページ間の$ _SESSION変数に格納されていません。私はthis similar SO articleと多くの人々がこの問題を解決しようとしています。

私はそれを確認することができます

  1. セッションのものは、私の他のサイトに正常に動作しています。私はsession.save_pathで定義されたディレクトリを調べて、そこに(OLDサーバー上の)セッションファイルのロードがあります。
  2. $ _SESSION変数の内容をページの最後にエコーしましたが、正しいデータを保持しています。保存されていません。
  3. すべてのページに対してecho_d session_id()があり、同じ出力が得られます。
  4. NEWサーバのsession.save_pathフォルダ(/ usr/lib/php/session)で指定されたフォルダ内にファイルがありません。私はアクセス許可をチェックして、drwxrwx ---で設定されています。これは、PHPプログラムが書き込むことができることを意味しますか?
  5. .htaccessファイルがありません。
  6. 私はこれのphpinfo()の出力の関連部分からされるのCentOS 5.5

を実行しています:

Session Support  enabled 
Registered save handlers files user 
Registered serializer handlers php php_binary wddx 

Directive Local Value Master Value 
session.auto_start Off Off 
session.bug_compat_42 Off Off 
session.bug_compat_warn On On 
session.cache_expire 180 180 
session.cache_limiter nocache nocache 
session.cookie_domain no value no value 
session.cookie_lifetime 0 0 
session.cookie_path//
session.cookie_secure Off Off 
session.entropy_file no value no value 
session.entropy_length 0 0 
session.gc_divisor 1000 1000 
session.gc_maxlifetime 1440 1440 
session.gc_probability 1 1 
session.hash_bits_per_character 5 5 
session.hash_function 0 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path /var/lib/php/session /var/lib/php/session 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies Off Off 
session.use_trans_sid 0 0 

私はホスティング会社に連絡してきたし、彼らはので、それに見ていないだろうソフトウェアの問題で、管理されたアカウントではないと言います。

// info.php 
<? 
session_start(); 

$_SESSION['ID'] = "112233"; 
$_SESSION['token'] = "mytoken"; 

print $_SESSION['ID']; 
print $_SESSION['token']; 
?> 
<a href="info2.php">info 2</a> 

と、このコードでinfo2に呼ばれる1:

Grrrrr ...

あなたが働いていないいくつかのコードを見ることができるだけので、私は私がにリンクされている記事からコードを盗まれています

// info2.php 
<? 
session_start(); 

print $_SESSION['ID']; 
print $_SESSION['token']; 
?> 
<a href="info.php">info</a> 

結果はinfo.phpに配列データを出力していますが、info2.phpには出力がありません(もちろんリンクは別です)。

事前のお手伝いがあります。

+0

ここからの回答を試してください:http://bytes.com/topic/php/answers/783445-session-not-holding-value –

+0

ヘッダーの問題は、error_reporting(-1)を使用して最大のエラーメッセージを取得しますか? – krifur

+0

@Marek - session.save_pathがphp.iniファイルに正しく設定されているかどうかをチェックする以外に、その投稿にはすべての情報があります。しかし、私はそれを今でもやってきました。 – Joe

答えて

7

スクリプトが終了する前にexplicitly closing the sessionを試してください。おそらくあなたはいくつかのエラーメッセージを表示するかもしれません。

<?php 
error_reporting(E_ALL); ini_set('display_errors', true); 
session_start(); 
echo '<a href="?', time(), '">refresh</a>', "\n"; 

echo '<pre>'; 
echo 'session id: ', session_id(), "\n"; 

$sessionfile = ini_get('session.save_path') . '/' . 'sess_'.session_id(); 
echo 'session file: ', $sessionfile, ' '; 
if (file_exists($sessionfile)) { 
    echo 'size: ', filesize($sessionfile), "\n"; 
    echo '# ', file_get_contents($sessionfile), ' #'; 
} 
else { 
    echo ' does not exist'; 
} 

var_dump($_SESSION); 
echo "</pre>\n"; 

$_SESSION['ID'] = "112233"; 
$_SESSION['token'] = "mytoken"; 

session_write_close(); 
echo 'done.'; 
+0

乾杯。しかし、私はそれも試みたことに気付いていたはずです。 – Joe

+0

@Joe "これも試しました" - セッションファイルのファイルサイズをテストして内容も印刷する部分ですか? ;-) – VolkerK

+0

ああ。あなたが正しい。私はそれをしなかった。私はそれを与えるだろう。 – Joe

1

セッションファイルのサイズがゼロの場合は、サーバーに使用可能なディスク領域があることを確認してください。それが私の問題でした。

Linuxサーバでdf -hのディスク容量を確認してください。

関連する問題