5

ログインの成功時にセッション変数を設定するログイン ページがあります。次に、ログイン ページが管理ページにリダイレクトされます。管理ページは、セッション変数を問題なく読み取ることができます。しかし、コンテンツ 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");
    });
}
4

6 に答える 6

1

phpopenタグの前にいくつかのスペースがあります。それらはブラウザに出力を送信するため、セッションは開始されません。

于 2011-09-02T18:53:55.120 に答える
1

セッションが開始されていないと思われます。そもそもセッションが開始されていないことを知るために、過去に同様の問題が発生しました。

質問: セッション変数の値が存在することを確認するためだけに値を出力しようとしましたか? :

ページを呼び出す前とページを呼び出した後。

于 2011-12-11T03:35:04.740 に答える
1

$_COOKIE['PHPSESSID']が正しい場合は、次のようにsession_id()割り当てをsession_start()の前に追加してみてください。

<?php
    /** Add this: **/
    if (isset($_COOKIE['PHPSESSID']))
        session_id($_COOKIE['PHPSESSID']); 
    /** Start session **/
    session_start();

    /** Rest of the script... **/
    if(!isset($_SESSION['userID'])){
        header("location: ../login/index.php");
    }
?>

私はこれを常に使用しており、PHP のセッションに問題はありません。

于 2011-05-20T10:19:58.083 に答える
1

ロングショットかもしれませんが、フレームワークまたは cms を使用していますか? wordpress がセッション変数を削除することは知っています (http://blog.ginchen.de/en/2008/08/15/session-variablen-in-wordpress/) viewUsers をロードするために使用している JavaScript コードを表示できますか? ローカルサーバーでプログラミングしていますか?

于 2011-05-03T06:24:39.510 に答える
0

シンプルなものを提案します。これをすべてのファイルに含めます。

<?php
session_name("yourapplication_session");
session_start();

?>
于 2012-02-06T01:41:28.043 に答える
0

session_start()通常、この種のエラーは、セッション データの読み取りに使用しない場合に発生します。

配置してみてください(ただし、あるとのことですが、再確認することをお勧めします)

session_start();

あなたの最初にviewUsers.php

上記に当てはまらない場合は、現在のページ(関数を実行する.load()ページ)がセッションをリセットし、値を改ざんしています。コードをアップロードするか見つけ出さない限り、このケースの解決策はありません。

于 2011-04-29T06:12:45.720 に答える