我正在创建一个带有大学作业登录系统的网站。我创建的方法有一个php页面(主页面)顶部有一个部分,用于检查用户的会话变量:
<?php
// open the session
session_start();
header('Access-Control-Allow-Origin: *');
// check for existing user
if(isset($_SESSION['User'])){
$isUser = true;
$userName = $_SESSION['userName'];
}else{
$isUser = false;
}
?}
还有更多内容,但其余的只是使用会话添加适当字段的功能(登录部分/登录确认)这很好。
为了更改会话变量,使用了登录确认功能(非常长的脚本来检查数据库,也完美地工作),并在登录结束时检查是否正确更改了会话变量,如下所示:
//Start the session
session_start();
$arrUser = $result[0];
$_SESSION['User'] = $arrUser[0];
$_SESSION['userName'] = $arrUser[1];
return true;
这个工作,如果加载在一个单独的页面中(更改会话变量并调整页面以确认会话已更改,只有在手动打开带有变量的URL时)。但是尝试使用ajax运行php:
function Login(){
var Username = document.getElementById("Username");
var Password = document.getElementById("Password");
if(Username.value != "" && Password.value != ""){
URL = "https://localhost/CAB230/Login.php?username=" + Username.value +
"&password=" + Password.value;
httpGetAsync(URL, function(response){
if(response){
location.reload();
} else {
document.getElementById("Username").style.background = "red";
document.getElementById("Password").style.background = "red";
}
});
} else {
window.alert("Username and Password fields must both be filled out");
}
}
function httpGetAsync(theUrl, callback){
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
callback(xmlHttp.responseText);
}
xmlHttp.open("GET", theUrl, true); // true for asynchronous
xmlHttp.send(null);
}
导致true返回并重新加载页面,但会话变量不会随着登录部分的加载而改变而不是登录确认部分。
这非常令人困惑,因为在我的笔记本电脑上运行此ajax会更改会话变量,但是在我的电脑上这不起作用。