Помогите с решением задачи. Есть файл с содержимым: Код (Javascript): $(function() { $('#button').click(function(){ url = "/auth.php"; if (window.XMLHttpRequest) {xmlhttp=new XMLHttpRequest();} else {xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}; xmlhttp.open("POST",url,true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { if (xmlhttp.responseText != 0) { s = xmlhttp.responseText; if (s == 1) {location.href = url;} } else { ... }; } else { ... }; }; postString = "param=1"; xmlhttp.send(postString); }); }) и есть auth.php: PHP: <? session_start(); if ($_POST['param'] == 1) { $_SESSION["p"] = "сессия"; echo 1; } else { echo "Переменная сессии: "; echo $_SESSION["p"]; }; ?> В результате хочу получить: "Переменная сессии: сессия". Это получаю только в ie10. Chrome и Firefox выводят только "Переменная сессии: ". Бьюсь над задачей уже 3 дня.
Проверяйте, по какой причине это ветвление уходит только в xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"), либо используйте JQuery AJAX и враз забудете о проблемах.
Здесь, думаю, все в порядке. xmlhttp.responseText во всех браузерах принимает то что нужно. Проблема при повторной загрузке страницы location.href = url без post-параметров. В auth.php правильно идем по ветке else. Но нет сессии.
Прост то, что выдаст браузер в качестве ответа от сервера, зависит не от браузера. Если у вас все, кроме Ишака выдает пустоту, значит ваш POST-запрос не прошел на сервер и переменная не записалась, только и всего. Значит либо в коде трабла работой в плане XMLHttpRequest(), либо проблема с передачей идентификатора сессии, которой нет с Ишаком.
Сделал так: ничего не изменилось. $(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 выводят только "Переменная сессии: ".
Довольно странно, потому что проверил твой код - алерт выдает "1" в Хроме, Опере, Сафари, Огнелисе. Запрос уходит на сервер, сервер возвращает ответ, все работает.
Код (PHP): $(function() { $('#button').click(function(){ $.post('auth.php',{ param:1 },function(echo) { alert(echo); }); }); }); Код (PHP): session_start(); if(isset($_POST['param']) && 1===(int)$_POST['param']) { $_SESSION['p']='сессия'; } if(!empty($_SESSION['p'])) { echo"Переменная сессии: {$_SESSION['p']}"; }
Верно. Но после алерта=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. И тут же вопрос: как решить эту проблему?
http://php.ru/manual/function.session-set-cookie-params.html Добавлено спустя 58 секунд: параметры $path = '/', $domain='.site.ru' Добавлено спустя 1 минуту: + редирект в .htaccess