2012-04-13 6 views
0

OK ...私は論理的な意味を持たない何かを持っており、私は誰かが愚かな間違いを指摘することを願っています。私は、ユーザーがログインしているかどうかにかかわらずメニューを変更したいページがあります。セッション変数$ _SESSION ['is_logged_in]を使用して、ログインした状態を保存しています。たとえば、ログアウトした場合、メニューにloginと表示されます。ログインしている場合、同じメニューにログアウトが表示されます。ここに論理的な部分のコードがあります。私はすべてのコードスニペットを前もってお詫びしますが、できるだけ明確にしたいと思います。助けてください!

まず、私はいくつかの空のdivがあるのindex.phpと呼ばれるメインページがあります:このページ(index.phpを)では

<div id="wrapper"> 
    <div id="header"> 
     <h1>My Page</h1> 
     <div id="navigation"> 
     </div> <!-- end of navigation div --> 
    </div> <!-- end if header div --> 
    <p>&nbsp;</p> 
    <div id="mainContent"> 
    </div><!-- end mainContent div --> 
</div> <!-- end wrapper div --> 

を、私は準備ができて、ドキュメントのナビゲーションのdivのjqueryの負荷を持っています:

<script type="text/javascript"> 
    $(document).ready(function(e) { 
     //load the default menu 
     $('#navigation').load("menu.php"); 
    }); 
</script> 

OK ...今menu.phpは、次のHTML/PHPを持っています

<?php 
    session_start(); 
    include 'php/functions.php'; 

    //following is for debugging, you will see later where this is useful 
    if (is_logged_in()) 
    {  
    echo "logged in value: " . is_logged_in() . "<br />"; 
    print_r($_SESSION); 
    } 
    else 
echo "not sure what is going on</br >"; 
    echo "<br />"; 
?> 
    <ul id="menu" class="DropdownMenu"> 
    <li class="sub"><a href="#">Account</a> 
     <ul> 
      <?php 
       //this is where it should show one link or the other based on the value in $_SESSION 
       if (is_logged_in()) { 
       echo "<li><a href=\"#\" class=\"ClickLogout\">Log Out</a></li>\n"; 
       } else { 
       echo "<li><a href=\"#\" class=\"ClickLogin\">Log In</a></li>\n"; 
       } 
      ?> 
     </ul> 
    </li> 
    </ul> 

[OK]を...この時点で、PAG私はまだログインしていないので、期待どおりに "ここで何が起こっているかわからない"というデバッグメッセージが表示されます。そして、IログインのリンクをクリックするとAjaxを経由して、それはindex.phpの中MainContentのdiv要素を取り込みます

これはmenu.phpである:

$(document).ready(function(e) { 
    var options = { 
     target:  '#mainContent', // target element(s) to be updated with server response 
     success:  reloadMenu, // post-submit callback 
     delegation: true 
    }; 

    // post-submit callback 
    function reloadMenu(responseText, statusText, xhr, $form) { 
     $('#navigation').load("menu.php"); 
    }; 

    //set the jquery form plugin for the login form 
    $('.ContentForm').ajaxForm(options); 

    //load the login form in the mainContent div 
    $('#wrapper').on("click", ".ClickLogin", function(e) { 
     $('#mainContent').load("login.php"); 
    }); 

}); 

上記のコードは、フォームが送信されたときにすることを示しています成功した場合、投稿後のコールバックは、index.phpドキュメントの初期ロードと同様に、メニューを再ロードする必要があります。デバッグでは、リロードしていることがわかりますが、セッション変数には何も表示されません。したがって、ログインしていても、ログアウトの代わりにログインリンクが表示されます。今

、ここでは、ちょうど私が狂っていないです表示するために一緒にそれをすべて持って来るがlogin.phpにあるものである:

<?php 
    // start the session 
    session_start(); 
    include 'php/functions.php'; 

    //this sections handles the post of the form 
    $show_form = true; 
    if($_SERVER['REQUEST_METHOD'] == "POST") 
    { 
     $email = $_POST['email']; 
     $password = $_POST['password']; 

     if (authenticate_user($email, $password)) //this will set $_SESSION variables 
     { 
     $show_form = false; 
     echo "Congratulations " . get_user_name() . ", you are logged in <br />"; 

     //following is for debugging, you will see later where this is useful 
     if (is_logged_in()) 
     { 
      echo "logged in value: " . is_logged_in() . "<br />"; 
      print_r($_SESSION); 
     } 
     else 
      echo "not sure what is going on</br >"; 
     } 
     else 
     { 
     echo "Invalid email or password. Try again <br />"; 
     } 
    } 
?> 

<?php if ($show_form) { ?> 
<div id="formContent"> 
    <h2 class="ContentHeader">Log In</h2> 
    <form id="contentForm" name="registration" class="ContentForm" method="post" action=<?php echo $_SERVER['PHP_SELF']?>> 
     <p> 
     <label for="email">Email:</label> 
     <input type="email" name="email" id="email" required="required"> 
    </p> 
    <p> 
     <label for="password">Password:</label> 
     <input type="password" name="password" id="password" required="required"> 
    </p> 
    <p> 
     <input type="submit" name="insert" id="insertLink" value="Submit It" /> 
     <input type="reset" name="cancel" id="cancel" value="Reset" /> 
    </p> 
    <p>Forgot Password? Click <a href="#">here</a></p> 
    <p>Need to Register? Click <a class="ClickRegister" href="#">here</a></p> 
    </form> 

私はそれはとても多くのコードを知っています私は1つのことを指摘したい。この時点で、フォームが提出されると、#navigation divでmenu.phpがリロードされ、#mainContent divにlogin.phpがリロードされます。ログインフォームは、それが続く「で何が起こっているかわからない」と言うメニューの上、提出するページが表示された後場合は、「(アレイ)」

 //following is for debugging, you will see later where this is useful 
if (is_logged_in()) 
{ 
    echo "logged in value: " . is_logged_in() . "<br />"; 
    print_r($_SESSION); 
} 
else 
    echo "not sure what is going on</br >"; 

しかしMainContentの中:どちらも、これと同じコードを実行しています「ログインした値:1」と表示され、すべてのセッション値が出力されます。

ただ完全を期すため、is_logged_in()関数は次のようになります。

//return true if the current session is logged in 
function is_logged_in() 
{ 
    if (array_key_exists('is_logged_in', $_SESSION)) 
     return $_SESSION['is_logged_in']; 
} 

私は両方menu.phpでのsession_start()を持っていると私はやっていない場合login.php、それは私のすべての種類を提供します$ _SESSION配列にアクセスしようとすると、他のエラーが発生します。

本当に誰かが私の間違いを見つけられることを願っています。助けてください!

ありがとうございます。

+0

セッションクッキーの値は、これらのすべての要求を通して同じにとどまります。変化している場合は、毎回新しいセッションが空になります。これは、値が「消えている」理由を説明しています。まだ残っていますが、他のセッションでは残ります。 –

+0

どうすれば確認できますか? – Kamran

+0

[session_id()] – sennett

答えて

0

公式に閉鎖の質問に答える。上記のコメントで述べたように、私はログインの一環としてセッションを設定する前にセッションを破壊していました。私はまだ両方の部門が破棄/再作成の後にロードされたが、おそらくいくつかのAjax競合状態があるので、それがなぜ効果があったのかまだわからない。

私はちょうどそれが解決されてうれしく、私は上に移動することができます。あなたのご意見に感謝します。

関連する問題