2011-08-08 23 views
2

現在、$ _SESSIONで変数をテストしていて、isset()がfalseを返した場合、セッションがタイムアウトしてログインページが表示されたと仮定します。PHPセッションがタイムアウトしたかどうかを確認する方法

session_start(); 

if (isset($_POST['login'])): 
    // Process login credentials 
    $_SESSION['account'] = Array('user'=>'username'); 
endif; 

if (! isset($_SESSION['account'])): 
    // User not logged in, show login page 
else: 
    // User is logged in, show account page 
endif; 

ただし、アカウントページが空白であることをユーザーが最近報告しました。上記の私のコードは何らかの形で欠陥があるので、私はセッションデータが利用できないと仮定します。セッションがPHPでタイムアウトしたかどうかを正しくテストするための正しい指示を誰かに教えてもらえますか?

+1

これは空の '$ _SESSION ['account']'変数の場合ですか?または期待値が含まれていない可能性がありますか? – linuxeasy

+0

ああ、あなたは正しいかもしれません!あなたはコードの残りの部分を検索するように促し、$ _SESSION ['account'] = Array();を発見しました。(後でアカウント情報を入力する必要があります。上のコードの残りの部分はかなり堅牢ですか? – Tak

+0

ええ、それはそうだ! – linuxeasy

答えて

1

あなたは使用することができた場合:

if (! isset($_SESSION['account']) && !empty($_SESSION['account'])): 
    // User not logged in, show login page 
else: 
    // User is logged in, show account page 
endif; 

はので、これは文句を言わないのセッションが設定されている場合、セッションが

  • に設定されていない場合、2つの条件のため

    1. を渡すが、空白であります!

      まだ

    場合は、ユーザ名がxyzに来て、あなたがxyzに一致するすべてのレコードを持っていけない、それがフェッチされたレコードなしの場合可能性があり、したがって、それはあまりにも空白にすることができ、例えばのために、不正な値の存在します!

    これらの文だけではなく、$_POSTのデータがシステム内のいずれかのレコードと一致し、一致が確認された後でのみ$_SESSIONに設定する必要があることをさらに確認する必要があります。

    これらはほとんどのケースをカバーし、エスケープを少なくします。

  • 関連する問題