За последние 24 часа нас посетили 17738 программистов и 1280 роботов. Сейчас ищут 1419 программистов ...

Ajax + PHP + Сессии

Тема в разделе "JavaScript и AJAX", создана пользователем formovsky, 17 авг 2013.

  1. formovsky

    formovsky Новичок

    С нами с:
    17 авг 2013
    Сообщения:
    5
    Симпатии:
    0
    Помогите с решением задачи.
    Есть файл с содержимым:

    Код (Javascript):
    1. $(function() {
    2.     $('#button').click(function(){
    3.         url = "/auth.php";
    4.      
    5.         if (window.XMLHttpRequest) {xmlhttp=new XMLHttpRequest();} else {xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");};
    6.         xmlhttp.open("POST",url,true);
    7.         xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    8.         xmlhttp.onreadystatechange = function() {
    9.             if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    10.                 if (xmlhttp.responseText != 0) {
    11.                     s = xmlhttp.responseText;
    12.                     if (s == 1) {location.href = url;}
    13.  
    14.                  
    15.                 } else {
    16.                   ...
    17.                 };
    18.             } else {
    19.               ...        
    20.             };
    21.         };
    22.         postString = "param=1";
    23.         xmlhttp.send(postString);
    24.      
    25.     });
    26. })
    и есть auth.php:

    PHP:
    1. <?
    2.     session_start();
    3.  
    4.     if ($_POST['param'] == 1) {
    5.         $_SESSION["p"] = "сессия";
    6.         echo 1;  
    7.     } else {
    8.         echo "Переменная сессии: ";
    9.         echo $_SESSION["p"];
    10.     };
    11. ?>
    В результате хочу получить: "Переменная сессии: сессия". Это получаю только в ie10. Chrome и Firefox выводят только "Переменная сессии: ". Бьюсь над задачей уже 3 дня.
     
    #1 formovsky, 17 авг 2013
    Последнее редактирование модератором: 15 май 2020
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Проверяйте, по какой причине это ветвление уходит только в xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"), либо используйте JQuery AJAX и враз забудете о проблемах.
     
  3. formovsky

    formovsky Новичок

    С нами с:
    17 авг 2013
    Сообщения:
    5
    Симпатии:
    0
    Здесь, думаю, все в порядке. xmlhttp.responseText во всех браузерах принимает то что нужно. Проблема при повторной загрузке страницы location.href = url без post-параметров. В auth.php правильно идем по ветке else. Но нет сессии.
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Прост то, что выдаст браузер в качестве ответа от сервера, зависит не от браузера. Если у вас все, кроме Ишака выдает пустоту, значит ваш POST-запрос не прошел на сервер и переменная не записалась, только и всего. Значит либо в коде трабла работой в плане XMLHttpRequest(), либо проблема с передачей идентификатора сессии, которой нет с Ишаком.
     
  5. formovsky

    formovsky Новичок

    С нами с:
    17 авг 2013
    Сообщения:
    5
    Симпатии:
    0
    Сделал так: ничего не изменилось.

    $(function() {
    $('#button').click(function(){

    $.ajax({
    type: "POST",
    url: "/auth.php",
    data: "param=1",
    success: function(s) {
    alert(s); // ответ сервера тот, который нужен: 1
    url = "/auth.php";
    location.href = url;
    }
    });


    });
    })


    Файл: "auth.php"
    <?
    session_start();

    if ($_POST['param'] == 1) {
    $_SESSION["p"] = "сессия";
    echo 1;
    } else {
    echo "Переменная сессии: ";
    echo $_SESSION["p"];
    };
    ?>

    В результате хочу получить: "Переменная сессии: сессия". Это получаю только в ie10. Chrome и Firefox выводят только "Переменная сессии: ".
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Довольно странно, потому что проверил твой код - алерт выдает "1" в Хроме, Опере, Сафари, Огнелисе. Запрос уходит на сервер, сервер возвращает ответ, все работает.
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $(function() {
    2.     $('#button').click(function(){
    3.         $.post('auth.php',{
    4.             param:1
    5.         },function(echo) {
    6.             alert(echo);
    7.         });
    8.     });
    9. });
    Код (PHP):
    1. if(isset($_POST['param']) && 1===(int)$_POST['param']) {
    2.     $_SESSION['p']='сессия';
    3. }
    4. if(!empty($_SESSION['p'])) {
    5.     echo"Переменная сессии: {$_SESSION['p']}";
    6. }
     
  8. formovsky

    formovsky Новичок

    С нами с:
    17 авг 2013
    Сообщения:
    5
    Симпатии:
    0
    Верно. Но после алерта=1, я еще раз ухожу на страницу "/auth.php" в этой строчке: "location.href = url" и хочу вывести на экран значение переменной сессии, которую создал при отправке ajax запроса. Но этой переменной нет.

    Добавлено спустя 20 минут:
    Спасибо, но не совсем то, что нужно было. Вернее совсем не то.

    Добавлено спустя 10 минут 32 секунды:
    Еще одна задачка, которую извергнул извращенный мозг преподавателя:
    1 файл: ajax.js:

    $.ajax({
    type: "POST",
    url: "/php/session.php",
    success: function(s) {
    alert(s);
    }
    });

    2 файл, на который идет запрос: /php/session.php

    <?
    // Cookie точно существуют. Если указать в адресной строке браузера путь к этому файлу, то увидим 1
    if (isset($_COOKIE['p'])) {
    echo 1;
    } else {
    echo 0;
    };
    ?>

    У меня alert всегда показывает 0. Почему не получаю 1?

    Добавлено спустя 57 минут 1 секунду:
    Вроде разобрался. Проблема вот в чем:
    cookie создаются для сайта с адресом типа www.site.ru, даже если в адресной строке вбить просто site.ru. Но, если в адресной строке вбить site.ru (без www), то cookie ищутся именно на site.ru. Другими словами все будет работать, если забивать адрес строго с www. И тут же вопрос: как решить эту проблему?
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    *выпилено за неактуальностью :)
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
  11. formovsky

    formovsky Новичок

    С нами с:
    17 авг 2013
    Сообщения:
    5
    Симпатии:
    0
    Спасибо. Все работает
     
  12. Juks

    Juks Гость

    С нами с:
    12 май 2020
    Сообщения:
    1
    Симпатии:
    0
    кто нибудь знает like/dislike system в php js, есть ли туториалы или посты?