Javascript 使用ajax重定向后php会话丢失

Javascript 使用ajax重定向后php会话丢失,javascript,php,ajax,Javascript,Php,Ajax,我有一个index.html登录页面,它附带了一个名为index.js的JavaScript页面。这两个文件都在我的电脑上。 在index.js中,我有一个ajax调用,它使用web服务器上名为index.php的页面验证用户名和密码。 在index.php中,我启动一个会话,检查用户名和密码的身份验证,并返回结果。如果成功,我将重定向到服务器上的event.html页面。 问题在于,尽管index.php和event.html位于同一个web服务器上,但会话不会被传递。我在hindex.htm

我有一个index.html登录页面,它附带了一个名为index.js的JavaScript页面。这两个文件都在我的电脑上。 在index.js中,我有一个ajax调用,它使用web服务器上名为index.php的页面验证用户名和密码。 在index.php中,我启动一个会话,检查用户名和密码的身份验证,并返回结果。如果成功,我将重定向到服务器上的event.html页面。 问题在于,尽管index.php和event.html位于同一个web服务器上,但会话不会被传递。我在hindex.html和events.html上看到两个不同的会话cookie

index.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";
?>
$\u会话将被设置(尽管为空),即使您尚未启动会话,请使用!isset($\u会话)将始终返回FALSE

将代码更改为:

if(session_status() == PHP_SESSION_NONE) 
{
    session_start();
}

您的代码易受SQL注入攻击,您需要修复此问题。你正在用明文存储密码,你也需要修复他的密码。这是一项正在进行的工作,不是最终的项目。不要紧,正确操作会极大地改变逻辑,因此,按照您现在的方式进行操作,然后一次性修复是不可行的。会话不传递到哪里?下一个页面是events.html,它从web服务器上的events.php获取ajax信息。但是events.php与index.php具有不同的会话id只是为了继续,对于所有超全局数组,
$\u GET
$\u POST
$\u会话
$\u COOKIE
$\u文件
…等都是相同的。它们总是固定的。如果没有传递特定数组的数据,则仅为空数组。
if(session_status() == PHP_SESSION_NONE) 
{
    session_start();
}