#php #session
#php #сеанс
Вопрос:
Я следовал руководству wikiHow по созданию безопасной системы управления сеансами: http://www.wikihow.com/Create-a-Secure-Session-Managment-System-in-PHP-and-MySQL
и это работает нормально.
Теперь у меня проблема с тем, что идентификатор сеанса cookie _s изменяется (и информация о входе в систему) при вызове 2 последовательных ajax следующим образом :
<input type="button" value="go" id="mybutton" />
<script>
$("#mybutton").click( function() {
$.get("ajax1.php");
$.get("ajax2.php");
});
</script>
где оба ajax1.php и ajax2.php просто потребовался файл класса сеанса
<?php
require('session.class.php');
$session = new session();
$session->start_session('_s', false);
?>
при нажатии кнопки идентификатор сеанса, сохраненный в _s cookie, изменяется на новый. Я добавил оповещение между двумя ajax следующим образом
<input type="button" value="go" id="mybutton" />
<script>
$("#mybutton").click( function() {
$.get("ajax1.php");
alert("anything");
$.get("ajax2.php");
});
</script>
при разделении двух вызовов ajax идентификатор сеанса не изменился.
РЕДАКТИРОВАТЬ: фактический код не такой,, а скорее множество отдельных кнопок, каждая из которых имеет свой ajax,, но бывает, что пользователь нажимает кнопки последовательно перед ответом.
<input type="button" value="go" id="mybutton" />
<script>
$("#mybutton").click( function() {
$.get("ajax1.php");
});
</script>
<input type="button" value="go" id="mybutton2" />
<script>
$("#mybutton2").click( function() {
$.get("ajax2.php");
});
</script>
есть идеи??
Ответ №1:
Когда вы выполняете первый вызов AJAX, сервер запускает сеанс и отправляет идентификатор сеанса обратно в браузер в виде файла cookie. Для того, чтобы второй вызов AJAX выполнялся в том же сеансе, он должен отправить этот файл cookie обратно на сервер.
Но вы не ждете ответа на первый вызов перед отправкой второго вызова. Таким образом, файл cookie не был получен, и он не может быть отправлен со вторым вызовом. Все, что зависит от результата вызова AJAX, должно выполняться в его функции обратного вызова. Итак, вы должны сделать:
$.get('ajax1.php', function() {
$.get('ajax2.php');
});
Комментарии:
1. спасибо .. но фактический код имеет только один ajax в последовательности ,, но имеет много кнопок на странице, и пользователи нажимают на многие кнопки, прежде чем ждать ответа.. как я могу преодолеть это
2. Отображать какую-то «загрузку …», когда они нажимают на кнопку, и не разрешать им нажимать на что-либо еще, пока не придет ответ.
3. Я думал сделать это,, но это будет раздражать пользователей, поскольку им приходится делать много вариантов, каждый из которых занимает около 1 секунды, чтобы закончить,, Я подумал, что может быть другое решение
4. На самом деле другого решения нет. Если вы хотите, чтобы два вызова были в одном сеансе, вам нужно дождаться завершения первого, прежде чем выполнять второй.
5. Вы можете отобразить загрузчик только при первом нажатии на любую кнопку. Как только вы получите этот ответ, вы знаете, что сеанс настроен, и все остальные кнопки могут быть обработаны, не заставляя пользователя ждать.