我有一个index.html登录页面,其中附有一个名为index.js的JavaScript页面。这两个文件在我的电脑上是本地的。 在index.js中,我有一个ajax调用,它使用名为index.php的页面验证用户名和密码,该页面位于Web服务器上。 在index.php中,我启动会话并检查用户名和密码的验证,并回显结果。如果成功,我会重定向到服务器上的event.html页面。 问题是尽管index.php和event.html位于同一个Web服务器上,但会话仍未传递。我在hindex.html和events.html
上看到了两个不同的会话cookieindex.js:
$.ajax({
type:'POST',
url:"http://example.com/index.php",
beforeSend: function(xhr){
xhr.withCredentials = true;
},
data:$('#LoginForm').serialize(),
success:function(response){
response = response.replace(/(\r\n|\n|\r)/gm,"");
alert(response);
if(response == "client logged in")
window.location.href = http://example.com/events.html';
},
error:function(xhr, status, error){
var t = JSON.stringify(xhr);
alert(t);
}
});
的index.php:
<?php
include 'head.php';
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type');
header("Access-Control-Allow-Credentials: true");
error_reporting(0);
if(isset($_POST['username']) &&isset($_POST['password']))
{
$username=$_POST['username'];
$password=$_POST['password'];
if(!empty($username) && !empty($password))
{
$query="SELECT user_id
FROM users
WHERE username='$username' AND password='$password' ";
$run_query=mysqli_query($conn,$query);
}
write_to_ses('user_id',$user_id);
echo "client logged in";
?>
head.php:
<?php
if(session_status() == PHP_SESSION_NONE)
{
session_start();
}
header('Access-Control-Allow-Origin: *');
error_reporting(0);
function write_to_ses($session, $data)
{
$_SESSION[$session]=$data;
}
function read_from_ses($session)
{
$user_id = $_SESSION[$session];
return $user_id;
}
?>
修改 这可能是跨域问题吗?因为我正在从本地html转移到服务器上的html页面,尽管所有的php文件都在服务器上。
EDIT2: 我正在从本地html转移到服务器html。那么index.php可能会停止会话,并且events.php会开始一个新会话吗?
EDIT3: 刚刚将events.html传递给我的电脑,所以没有从客户端移动到服务器html。还是行不通。相同的域和相同的路径两个PHP文件和两个不同的会话而不是一个。
Edit4: 我删除了所有标题。从我的电脑运行index.html时,它给了我这个错误:&#34; XMLHttpRequest无法加载https://example.com/index.php。 No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; null&#39;因此不允许访问。&#34;
答案 0 :(得分:1)
将您的代码更改为:
if(session_status() == PHP_SESSION_NONE)
{
session_start();
}