ログインの成功時にセッション変数を設定するログイン ページがあります。次に、ログイン ページが管理ページにリダイレクトされます。管理ページは、セッション変数を問題なく読み取ることができます。しかし、コンテンツ div に viewUsers.php をロードする jQuery load() 関数を実行すると、セッション変数がなくなります。奇妙な部分は、セッション ID が同じであることです。
admin ページと viewUsers ページの両方で var_dump() を使用しました。管理ページには、ログイン ページからのすべての適切な変数が表示されますが、$_SESSION の jQuery load() 関数 var_dump で呼び出される viewUsers ページは空白です。$_COOKIE['PHPSESSID'] の var_dump には適切な ID がありますが、私には意味がありません。
これは、セッション変数を設定する方法です。
$_SESSION['userID'] = $userInfo['ID'];
$_SESSION['userType'] = $userInfo['userType'];
$_SESSION['programID'] = $userInfo['programID'];
これはjQueryです
$("#content").load("viewUsers.php");
すべてのページの一番上に session_start() があります。jQuery load() 関数の代わりに window.open と window.location を試したときも、セッション変数は機能しませんでした。
正しいセッション ID を持っているにもかかわらず、セッション変数がどのように失われているか。誰かがこれに光を当てることができれば、本当に感謝しています!
現在、隠しフィールドにデータを入力し、ロードの代わりにポスト関数を使用してそれを回避しています。これが最善の方法ではないことは理解していますが、それを行う方法を理解できる唯一の方法です。
編集: これは、セッション変数を正常に読み取ったインデックスの上部です。
<?php
session_start();
//require("session.php");
if(!isset($_SESSION['userID'])){
header("location: ../login/index.php");
}
?>
これがビューユーザー全体です
<?php
session_start();
//foreach($_POST as $name => $value){
//$_SESSION[$name] = $value;
//}
//echo " session id " . $_COOKIE['PHPSESSID'];
var_dump($_COOKIE);
var_dump($_SESSION);
?>
<?php require("adminFunctions.php"); ?>
<h2>View Current Users</h2>
<?php require("userlinks.php"); ?>
<table id="userTable" class="tablesorter">
<?php getUsers($_SESSION['programID'], $_SESSION['userType']) ?>
</table>
<script type="text/javascript">
$('td[name="userID"]').hide();
//$("#userTable th").click(function(){
//color();
//colorTable();
//color();
//});
function colorTable(){
$("tr:odd").css("background-color", "#c0c0c0");
$("tr:even").css("background-color", "#ffffff");
}
function color(){
$("tr:odd").css("background-color", "#ffffff");
$("tr:even").css("background-color", "#ffffff");
}
$(document).ready(function(){
//colorTable();
$("#userTable").tablesorter({widgets: ['zebra']});
});
</script>
別の編集: これはビューユーザーをロードするための JavaScript コードです。投稿を使用している唯一の理由は、セッション変数を渡すためにセッション変数を非表示フィールドとして設定したためです。ビューユーザーでは、foreach ループを使用してセッション変数を設定します。これは安全ではないことを理解しています。関数maintainUsers(){
$.post("viewUsers.php", $("#sessionform").serialize(),function(data){
//alert(data);
$("#content").load("viewUsers.php");
});
}