возвращение php сессии в ajax - PullRequest
       1

возвращение php сессии в ajax

0 голосов
/ 22 августа 2011

У меня проблемы с получением jQuery ajax для распознавания сеанса. Я создаю php-сессию из сценария входа в систему, но происходит то, что, когда ajax загружает страницу с проверкой подлинности, сессия всегда сбрасывается. Например, на защищенной странице, если я обновляю страницу, идентификатор сеанса меняется каждый раз. У меня есть session_start (); на каждой странице. Может кто-нибудь, пожалуйста, покажите мне правильный способ обработки сеансов с ajax и php? Я потратил 2 дня и так много использовал Google, что, вероятно, получу приглашение на рождественский обед :-) Я включил соответствующий код и был бы благодарен за любую помощь. Спасибо

PS. Если это имеет какое-то значение, я пытаюсь разработать мобильное приложение, используя jquery mobile.

логин html js

$(function() {
    $("#kt_login1").click(function() {
        var user = $('#user').val();
        var pass = $('#pass').val();
        if (user == '') {
            $("#login_message").html('This field cannot be empty')
            $('label[for=user]').addClass("label")
            return false;
        }
        else if (pass == '') {
            $("#login_message").html('This field cannot be empty')
            $('label[for=pass]').addClass("label")
            return false;
        }
        else $('label[for=user]').removeClass("label");
        $('label[for=pass]').removeClass("label");

        //alert(user + pass + ok);
        data = 'user=' + user + '&pass=' + pass;
        $.ajax({
            type: "POST",
            url: "testajax.php",
            cache: false,
            data: data,
            success: function(data) {
                if (data == 'authenticated') {
                    //alert(user);
                    document.location = 'secure.php';
                }
                else $('#login_message').html('You are not authorised');

                //$(ok).val('Logged In');
                //$("#login").get(0).reset();
                //$("#form").dialog('close');
            },
            error: function(xhr, ajaxOptions, thrownError) {
                jAlert('There was an exception thrown somewhere');
                alert(xhr.status);
                alert(thrownError);
            }
        });
        return false;
    });
});

testajax.php

<code><?php

// test wether the user session is already set
$username = mysql_real_escape_string($_POST['user']);
$pass = mysql_real_escape_string(md5($_POST['pass']));

mysql_connect('localhost', 'root', '');
mysql_select_db('sample');

//now validating the username and password
$sql="SELECT * FROM user_usr WHERE username_usr='$username' and password_usr='$pass'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

//if username exists
if(mysql_num_rows($result)>0) {
    session_start();
    $_SESSION['u_name']=$row['name_usr'];
    /*
    echo '<pre>';
    print_r( $_SESSION['u_name'] );
    print_r( $_REQUEST );

    echo '
'; выход; * / эхо 'аутентифицировано'; } еще { echo 'Unknown User'; } ?>

+++++ +++++ РЕШЕНИЕ

Изменена форма ввода с отправки на кнопку и вуаля. Все ок

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Вы должны вызывать session_start() каждый раз, работая с сеансом (не только при его создании)

см: http://php.net/manual/en/function.session-start.php

0 голосов
/ 22 августа 2011

Существует множество причин, по которым это может быть так, но ваш код перевернут! Это вполне может быть причиной (или способствующим фактором).

Не следует рассматривать существование сеанса как доказательство аутентификации (содержание сеанса - это совсем другое). Вызовите session_start () вверху вашего скрипта - не условно, на полпути.

Относительно того, почему ваши данные сеанса недоступны ... это часто задаваемые вопросы здесь - взгляните на некоторые из предыдущих ответов на возможные причины / как расследовать.

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