Идентификатор сессии PHP тот же, но переменные потеряны - PullRequest
4 голосов
/ 29 апреля 2011

У меня есть страница входа, которая устанавливает переменные сеанса после успешного входа. Страница входа затем перенаправляется на страницу администратора. Страница администратора может читать переменные сессии просто отлично. Но когда я выполняю функцию jQuery load (), которая загружает viewUsers.php в div содержимого, переменные сеанса исчезают. Странная часть - идентификатор сессии такой же.

Я использовал var_dump () как на странице администратора, так и на странице viewUsers. На страницах администратора отображаются все правильные переменные со страницы входа, но страница viewUsers, которая вызывается с помощью функции jQuery load () var_dump со значением $ _SESSION, пуста. var_dump из $ _COOKIE ['PHPSESSID'] имеет правильный идентификатор, хотя для меня это не имеет никакого смысла.

Так я устанавливаю переменные сеанса.

$_SESSION['userID'] = $userInfo['ID'];
$_SESSION['userType'] = $userInfo['userType'];
$_SESSION['programID'] = $userInfo['programID'];

Это jQuery

$("#content").load("viewUsers.php");

Все страницы имеют session_start () в самом верху. Переменные сеанса также не работали, когда я пытался использовать window.open и window.location вместо функции jQuery load ().

Некоторым образом переменные сеанса теряются, хотя у меня правильный идентификатор сеанса. Если бы кто-нибудь мог пролить свет на это, я был бы очень признателен!

На данный момент я заполняю скрытые поля и использую функцию post вместо load, чтобы обойти это. Я понимаю, что это не лучший способ, но это единственный способ понять, как это сделать.

Edit: Вот верхняя часть индекса, которая отлично читает переменные сеанса.

 <?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 для загрузки зрителей Единственная причина, по которой я использую post, заключается в том, что я устанавливаю переменные сеанса как скрытые поля для передачи переменных сеанса. На пользователях просмотра я использую цикл foreach для установки переменных сеанса. Я понимаю, что это не безопасно. function keepUsers () {

$.post("viewUsers.php", $("#sessionform").serialize(),function(data){
        //alert(data);
        $("#content").load("viewUsers.php");
    });
}

Ответы [ 6 ]

1 голос
/ 11 декабря 2011

Я подозреваю, что сессия не начинается. В прошлом у меня были похожие проблемы, чтобы выяснить, что сессия не была начата с самого начала.

Вопрос: вы пытались распечатать значение в переменной сеанса, чтобы убедиться, что оно там? :

Прежде чем зайти на страницу и после вызова страницы.

1 голос
/ 20 мая 2011

Если вы получили правильный $ _ 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.

1 голос
/ 03 мая 2011

Может быть, это длинный выстрел, но вы используете какие-либо рамки или cms?Я знаю, что WordPress удалит переменные сеанса (http://blog.ginchen.de/en/2008/08/15/session-variablen-in-wordpress/) можете ли вы показать код JavaScript, который вы используете для загрузки viewUsers?

0 голосов
/ 06 февраля 2012

Я бы предложил что-то простое. Включите это в КАЖДЫЙ файл.

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

?>
0 голосов
/ 02 сентября 2011

У вас есть пробелы перед открытым тегом php. Они отправляют вывод в браузер, и, таким образом, сеанс не начинается.

0 голосов
/ 29 апреля 2011

Обычно такая ошибка возникает, когда вы не используете session_start() для чтения данных сеанса.

Попробуйте разместить (хотя, вы сказали, что у вас есть, я бы посоветовал перепроверить)

session_start();

В начале вашего viewUsers.php

Если это не так, то ваша текущая страница (та, с которой вы выполняете функцию .load()) сбрасывает сеанс и вмешивается в значения.Если вы не загрузите код или не обнаружите его, для этого случая не будет никакого решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...