PHP5 $ _SESSION не работает, когда register_globals выключен - PullRequest
0 голосов
/ 21 октября 2011

Я знаю, этот вопрос задавался много раз, но я не смог найти решение.
Я написал скрипт php / JS, чтобы получать данные с сервера и показывать их.
Я использую Ajax для проверкиаутентифицирован ли пользователь?Я использую метод ниже, чтобы сделать это;
Мой index.php:

>?php
...
...
$.post("data.php",{ req:'login',
username:$('#username').val(), //user enters given id
pass:$('#password').val(),
job:$('#job').val(),
rand:Math.random() } ,
function(data)
{
if (data == 'yes') // user is authenticated.
document.location='system.php';
}
...
...
// i am using a form to send collected data to data.php
?>

в коде data.php выглядит примерно так:

>?php
session_start();
$link = mysql_connect("localhost", "user", "pass"); 
if (!$link) {
    die("No connection : " . mysql_error());
}
    mysql_select_db("database");

if ($_POST["req"] == "login"){
    $user_id=($_POST["username"]);
    $user_pass=($_POST["pass"]);
    $user_job=($_POST["job"]);

    // select proper table (related to his/her job) and control did user supplied correct password?

    if( password is correct ){
    $_SESSION["id"]=$_POST["username"];
    // or $_SESSION["id"]=$user_id;
    echo "yes";
    }
    else echo "no"; //Invalid Login
} else if ($_POST["req"] == "userinfo"){
...
...
...
} else 
...
...
?>

Система работает нормально, пока я не перенаправляюсь на system.php,В system.php я хочу использовать переменную $ _SESSION, чтобы получить имя зарегистрированного пользователя в JavaScript.
Часть моего system.php;

>?php
session_start();
if ((isset($_SESSION["id"]))||(!empty($_SESSION["id"]))) header("Location:index.php");
$userno = $_SESSION["id"];
if(isset($_GET["logout"]))
{
    session_destroy();
    $_SESSION["id"] = FALSE;
    header("Location:index.php");
}
?>
...
...
...
>script type="text/javascript">
$.post("data.php",{ req:'userinfo',username:'>?php echo ($userno) ?>',rand:Math.random() } ,function(data){
// sure ?php is written corrctly in script ;)
//.... again get data from data.php and put results into page..
});
>/script>

Этот код работает правильно на моем ПК (xampp), нона моем сервере нет шансов ..
echo ($ userno) ничего не выводит.
Я искал много мест и обнаружил, что это потому, что register_globals выключен.Я понял, почему это так.
Но почему я не могу получить значение $ _SESSION ["id"] и присвоить его $ userno в моем system.php
ПРИМЕЧАНИЕ : яиспользование одного и того же файла data.php для многих других запросов, и все эти запросы зависят от имени пользователя, но различные условия изменяют таблицы, используемые для источника данных, поэтому я не могу получить информацию в начале.
Спасибо, прямо сейчас ...
Примечание: из-за того, что я не смог найти правильный способ использования подсветки кода, я поставил>? Php для запуска частей кода php и> скрипт для частей кода JS ..

Ответы [ 4 ]

0 голосов
/ 19 августа 2014

Простое и удобное решение для регистрации ваших переменных.

foreach ($_POST as $key => $value) {
 eval("$".$key."= '".$value."';");
}
0 голосов
/ 21 октября 2011
echo '<pre>';
print_r($_SESSION);
die;

Что вы получаете?

Проверьте содержимое $userno на стороне сервера:

$userno = $_session["id"];
var_dump($userno);
die;
0 голосов
/ 21 октября 2011

Это очень интересно, я управлял файлом error.log на моем сервере (я не знаю, почему я раньше не управлял), есть некоторые ошибки: сеансы уже отправлены ... как ошибки
и я нашел страницу форума, на которой написано:
Иногда проблема вызвана свойством Включить подпись Unicode (BOM) , затем я контролировал свой тип кодирования и увидел, что UnicodeСпецификация (я использую без спецификации, но я не понимаю, как это могло произойти), когда я конвертирую без спецификации проблема решена.

Это полностью моя ложь (дажедезинформация) спасибо за вашу помощь.

0 голосов
/ 21 октября 2011

Я считаю, что это должно быть $_SESSION, а не $_session.Это суперглобальный, и он чувствителен к регистру.

...