【问题标题】:Creating a PHP session variable after successful AJAX call成功 AJAX 调用后创建 PHP 会话变量
【发布时间】:2021-06-27 16:42:09
【问题描述】:

我在成功调用 AJAX 后创建 PHP 会话时遇到问题。这是 AJAX 代码:

function onSignIn(googleUser) {
 var profile = googleUser.getBasicProfile();
 var id = profile.getId();
 var em = profile.getEmail();
 var name = profile.getName();
 var pic = profile.getImageUrl();
 var xhttp = new XMLHttpRequest();
 xhttp.onreadystatechange = function() {
 if (this.readyState == 4 && this.status == 200) {
   document.getElementById('confirm-login').style.display = 'block';
 }
};
 xhttp.open("GET", "./assets/inc/profile.php?id="+id+"&e="+em+"&n="+name+"&p="+pic, true);
 xhttp.send();  
}

这部分工作得很好。为了完整起见,我只包括它。

这是profile.php的内容

<?php

$id = $_GET["id"];
$email = $_GET["e"];
$name = $_GET["n"];
$pic = $_GET["p"];

require_once("db.php");

$result = $mysqli->query("SELECT googleid FROM user_tbl WHERE googleid = '$id' LIMIT 1");

if($result->num_rows == 0) {
    $sql = "INSERT INTO user_tbl (googleid, email, fullname, pic, loc) VALUES ('$id', '$email', '$name', '$pic', '')";
    if (mysqli_query($mysqli, $sql)) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "" . mysqli_error($mysqli);
    }
} else {
    echo "already exists";
}

$mysqli->close();

session_start();    
$_SESSION['gid'] = $id;

?>

除了session_start();$_SESSION['gid'] = $id; 当我返回另一个 PHP 页面(页面顶部正确有session_start();)之外,所有这些代码都有效,该变量尚未在 profile.php 中创建

任何关于我做错了什么的帮助都会非常感激。

【问题讨论】:

  • 在将 confirm-login 设置为可见的成功行下方或之后,输入 console.log(this.resultText) 并检查错误消息。此外,您的代码容易受到 SQL 注入的影响,您可以使用 fetch() 和 FormData 来极大地优化您的 JS 代码。

标签: javascript php ajax session


【解决方案1】:

脚本发送输出后,您无法启动会话。 (应该有这样的输出;如果没有,请尝试更改 PHP 的警告。) session_start() 调用必须在任何实际执行的 echo 调用之前进行。

在一个不相关的主题上,您将想了解如何转义您的数据库参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2011-08-17
    • 2016-03-16
    • 2018-04-04
    相关资源
    最近更新 更多