我按照wikihow教程构建了一个安全的会话管理系统:http://www.wikihow.com/Create-a-Secure-Session-Managment-System-in-PHP-and-MySQL
它工作正常。
现在,我遇到一个问题,即当连续调用2个连续的ajax时,会话ID cookie会改变(和登录信息):
<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中的会话ID将更改为新的会话ID。我在这两个ajax之间添加了一个警告
<input type="button" value="go" id="mybutton" />
<script>
$("#mybutton").click( function() {
$.get("ajax1.php");
alert("anything");
$.get("ajax2.php");
});
</script>
通过分离两个ajax调用,会话ID没有改变。
修改 实际的代码不是这样的,而是许多单独的按钮,每个都有它的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>
任何想法??
答案 0 :(得分:3)
当您进行第一次AJAX调用时,服务器启动会话并将会话ID发送回cookie中的浏览器。为了使第二个AJAX调用在同一个会话中,它必须将该cookie发送回服务器。
但是在发送第二个电话之前,你不是在等待对第一个电话的响应。因此,cookie尚未收到,并且无法通过第二次呼叫发送。任何依赖于AJAX调用结果的东西都必须在其回调函数中完成。所以你应该这样做:
$.get('ajax1.php', function() {
$.get('ajax2.php');
});