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> </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配列にアクセスしようとすると、他のエラーが発生します。
本当に誰かが私の間違いを見つけられることを願っています。助けてください!
ありがとうございます。
セッションクッキーの値は、これらのすべての要求を通して同じにとどまります。変化している場合は、毎回新しいセッションが空になります。これは、値が「消えている」理由を説明しています。まだ残っていますが、他のセッションでは残ります。 –
どうすれば確認できますか? – Kamran
[session_id()] – sennett