【问题标题】:PHP Session ClassPHP 会话类
【发布时间】:2014-06-30 00:24:53
【问题描述】:

我按照 wikihow 教程构建安全会话管理系统:http://www.wikihow.com/Create-a-Secure-Session-Managment-System-in-PHP-and-MySQL

而且效果很好。

现在,当像这样调用 2 个连续的 ajax 时,会话 id cookie _s 会发生变化(并登录信息),我有一个问题:

<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 会更改为新的。我像这样在两个 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>

有什么想法吗??

【问题讨论】:

    标签: php session


    【解决方案1】:

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

    但是在发送第二个呼叫之前,您不会等待对第一个呼叫的响应。所以cookie还没有收到,第二次调用也无法发送。任何依赖于 AJAX 调用结果的事情都必须在其回调函数中完成。所以你应该这样做:

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

    【讨论】:

    • 谢谢 .. 但是实际代码中只有一个 ajax 序列,但是页面上有很多按钮,用户在等待响应之前点击了很多按钮.. 我该如何克服这个问题
    • 当他们点击一个按钮时显示某种“正在加载...”的东西,并且在响应返回之前不允许他们点击其他任何东西。
    • 我想过这样做,但这会惹恼用户,因为他们必须做出很多选择,每个选择大约需要 1 秒才能完成,我认为可能还有其他解决方案
    • 真的没有其他解决方案。如果您希望两个呼叫在同一个会话中,您必须等待第一个呼叫完成,然后再进行第二个呼叫。
    • 您只能在加载程序第一次单击任何按钮时显示。收到回复后,您就知道会话已设置,并且可以处理所有其他按钮,而无需让用户等待。
    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2012-10-27
    • 1970-01-01
    • 2012-12-21
    相关资源
    最近更新 更多