2009-07-16 28 views
6

私は、すべて私のヘッダー、フッター、共通情報を含むテンプレートファイルを持っています。現在のページに適切なコンテンツが含まれています(2段階のビューパターン)。PHPセッション変数 - 消えて再表示

PHPセッション変数を使用してログインシステムを設定しようとしています。私は変数を設定することができ、時には動作しますが、時には変数が消えます。リンクをクリックすると、時々それらが戻ってきます。

My site

ユーザー名とログイン:テスト パスワード:テスト

上部にsession_idvar_dumps$_SESSIONがあります。

[ホーム]をクリックします。セッション変数が消えた場合、セッション情報が戻って来るのを見るために、ホームをクリックします(10回もかかるかもしれません)。他のナビゲーションをクリックすると、セッション情報が表示されることがあります。時には表示されない場合もあります。

テンプレートファイルの先頭にあるセッションコードは次のとおりです。

<?php 
session_start(); 

require './classes/DBInterface.php'; 
$db = new DBInterface(); 

if($_REQUEST['submit'] == 'Login') { 
    $username=$_POST['username']; 
    $password=$_POST['password']; 

    echo '-- login -- '.$username; 
    $rs = $db->verify($username,$password,"admin",0); 
    $admin = $rs->current(); 
    if ($rs->valid()) { 
     $_SESSION['username'] = $username; 
    } 
} 

echo ' -- session id -- '; 
var_dump(session_id()); 
echo ' -- session var -- '; 
var_dump($_SESSION); 

私はPHP5を使用しています。

答えて

4

あなたがstartlogicを使用している場合は(あなたに思えますある)あなたのホスティングのために、あなたは彼らが彼らのFAQで言うことをやってみました:?http://www.startlogic.com/knowledgebase/read_article.bml?kbid=600

彼らはこの指示:が含まれ、PHPのセッションを実行するには

をセッションを使用するPHP スクリプトの先頭にあるコードに従います。 session_save_path( "あなたのホームディレクトリ パス"/cgi-bin/tmp); session_start();

これは役に立ちますか? 特に、ロードバランサを使用している場合は、/ tmpのバランスをとりますが、ホームディレクトリは使用しません。

+0

ありがとうございました。それは私に起こったことは決してホスティングのことではありません。今私は問題を単純化しようとしていたすべてのコードを取り戻すようになる。 – Emily

+0

まあ、それは興味深い問題でした^^ 楽しい時があります:-) –

2

ロードバランシング設定を使用している場合、N台のサーバーのうち1台だけが正しいセッションデータを持っている可能性があります。

デフォルトでは、セッションデータはファイルシステムに保存されます。
ファイルは/ tmp /に格納され、 "sess"で始まり、その後に "session_id"が続きます。

1

この前に何も呼び出されていないことは絶対に肯定的です。私はsession_start()がヘッダーを変更していることを知っていますが、それ以外の理由はわかりません。

先に行くと、右のsession_start()呼び出しの前に、スクリプトの先頭にエラー報告をオンにし、そしてそれは、これを追跡することができますどのように参照してください。

error_reporting(E_ALL^E_NOTICE); 
ini_set('display_errors',1); 
session_start() 
関連する問題