javascript - 为什么我的系统会自动退出?

标签 javascript php session

我登录到我的网站(在本地主机上运行),并将用户 ID 存储在 session 变量中

$_SESSION['user_id'] = $user_id;

主页已加载,一切正常。我在主页上显示了用户 ID,所以我确信它的值(value)。当我加载另一个页面时,使用

php = 'some_php_file.php';
window.open(php,php);

第二页打开正常。但是,如果我尝试再次打开同一页面,单击主页上的同一按钮,系统将注销。如果我省略 window.open() 中的第二个 php (使用 '' 代替),我可能有同一个窗口的多个副本(我不想要的),但没有自动注销的问题.

知道会发生什么吗?

编辑:如果我关闭第二个窗口并重复该过程,则不会出现注销问题。我可以根据需要多次关闭并重新打开第二个窗口。仅当我尝试打开第二个窗口但它已经打开时才会出现此问题。我还可以打开不同的“第二个窗口”(不同的 php 文件)。只有当我尝试打开同一窗口两次时,我才会被注销。

编辑2:看来我已经找到了。在调用 window.open() 之前,我使用以下函数测试 php 文件是否存在:

function fileExists(url){
    var http = new XMLHttpRequest();
    http.open('HEAD',url,true);
    http.send();
    return http.status != 404;
}

如果我将 http.open() 行更改为

http.open('HEAD',url,false);

它有效!但是manual告诉我们在第三个参数中使用“true”...我该怎么办?

最佳答案

在我看来,您的 fileExists 函数只是始终返回 true,因为它不会等待 XHR 完成。除非您指定 async = false

是时候阅读How to return the response from an asynchronous call?了可能吧。

我不知道这总是正确的结果是什么,因为你没有确切地分享你对这个结果所做的事情。

现在,如果您想“坚持使用手册”并保持 async = true (您确实应该这么做),那么只需将以下代码包装在回调中即可。例如:

function fileExistsAsync(url, callback){
    var http = new XMLHttpRequest();
    http.open('HEAD',url,true);
    http.send();
    http.onreadystatechange = function () {
        if (http.readyState === 4) {
            callback(http.status != 404);
        }
    }
}

fileExistsAsync(url, function (exists) {
    console.log("async " + exists);
});

演示:http://jsfiddle.net/52xqLfow/

关于javascript - 为什么我的系统会自动退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33738068/

相关文章:

javascript - 单击时将参数传递给 Angular Directive(指令)

javascript - 禁用在 jQuery DateTimePicker 中的下一个/上一个操作期间自动更改日期值

javascript - 奇怪的 HTML 行包装

php - php中的用户权限(和多用户登录表单)

php - 如何仅使用我的更改来更新我的 symfony 模块?

javascript - 通过Javascript函数返回PHP数据,无需提交表单

java - Spring应用程序如何处理注销

php - 如果网站关闭,则返回并终止 session

javascript - 使用 str.replace() 在 JavaScript 字符串中插入 "."

php - 为什么我不能在我的 php 脚本中使用 session_start()?它说标题已经发送