Я следил за учебником wikihow для создания безопасной системы управления сеансом: http://www.wikihow.com/Create-a-Secure-Session-Managment-System-in-PHP-and-MySQL
и он отлично работает.
Теперь у меня возникла проблема, связанная с тем, что cookie_имя session cookie _s меняет (и регистрирует информацию), когда два последовательных 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>
-<input type="button" value="go" id="mybutton" /> <script> $("#mybutton").click( function() { $.get("ajax1.php"); alert("anything"); $.get("ajax2.php"); }); </script>
разделяя два вызова ajax, идентификатор сеанса не изменился.
EDIT: фактический код не такой, но многие отдельные кнопки имеют аякс, но бывает, что пользователь нажимает кнопки подряд до ответа.
<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>
есть идеи??
Когда вы делаете первый вызов AJAX, сервер запускает сеанс и отправляет идентификатор сеанса обратно в браузер в cookie. Чтобы второй вызов AJAX находился в одном сеансе, он должен отправить этот файл cookie обратно на сервер.
Но вы не дожидаетесь ответа на первый звонок перед отправкой второго вызова. Таким образом, cookie не был получен, и он не может быть отправлен со вторым вызовом. Все, что зависит от результата вызова AJAX, должно выполняться в его функции обратного вызова. Итак, вы должны сделать:
$.get('ajax1.php', function() { $.get('ajax2.php'); });