PHP会话类

时间:2014-06-30 00:24:53

标签: php session

我按照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>

任何想法??

1 个答案:

答案 0 :(得分:3)

当您进行第一次AJAX调用时,服务器启动会话并将会话ID发送回cookie中的浏览器。为了使第二个AJAX调用在同一个会话中,它必须将该cookie发送回服务器。

但是在发送第二个电话之前,你不是在等待对第一个电话的响应。因此,cookie尚未收到,并且无法通过第二次呼叫发送。任何依赖于AJAX调用结果的东西都必须在其回调函数中完成。所以你应该这样做:

$.get('ajax1.php', function() {
    $.get('ajax2.php');
});