1

ユーザーがログインしているときにログアウトフォーム(ログアウトボタンを含む)を表示し、それ以外の場合は非表示にしたい。私はこのコードを使用します:

<?php
if(isset($_SESSION['logged_in'])) {
//show logout form
?>

手順の問題:

  1. ユーザーがページにアクセスし、ログインフォームに情報を入力します
  2. ボタンをクリックすると、ログインフォームが送信されます(非表示の入力で制御されます)
  3. ログイン入力値はデータベース値と比較されます
  4. 入力値が正しい場合。$_SESSION['logged_in'] = true
  5. echo 'ログインしました!'
  6. ページが更新されます (フォームの送信後に自動的に行われます)。「ログインしています」と表示されるが、ログアウトフォームが表示されない
  7. ここで、自分でページを更新する必要があります。ログアウトフォームが表示されます

ログアウトしても同じことが起こります。ログアウト フォーム (およびログイン フォーム) は、自分でページを更新したときにのみ表示/非表示になります。

可能な解決策はありますか?

4

2 に答える 2

1

いくつかのテストとphp.netへの飛び込みの後、私は自分で答えを見つけました. 同じ種類の問題に直面する人のために:

  1. PHPコードの後に​​HTMLを含めます。それ以外の場合、コードは最初のページの更新後に html に影響を与えません
  2. 各 Cookie の有効時間を設定します。時間が入力されていない場合、セッションが終了すると Cookie が破棄されます。

    setcookie('username', $username); //NOT (no point at all in making this)
    setcookie('username', $username, time()+ 60*60*24*30 ); //YES
    
  3. session_destroy() はセッションを破棄しますが、セッション変数の設定を解除しません。たとえば、ログアウトするときは、セッションの設定を解除する必要があります。

    unset($_SESSION['logged_in']);
    session_destroy(); //and then destroy session if needed
    
于 2012-11-17T11:30:27.417 に答える
0

このパターンPost/Redirect/Getを試してください。

ログインを投稿し、ロジックを実行して、ユーザーをランディング ページ (またはログイン前の場所) にリダイレクトするだけです。このようにして、ユーザーのブラウザが更新されることが保証されます (したがって、ユーザーは別のページにリダイレクトされます)。

于 2012-11-17T00:04:46.660 に答える