javascript - 使用ajax重定向后php session 丢失

标签 javascript php ajax

我有一个index.html 登录页面,其中附加了一个名为index.js 的JavaScript 页面。这两个文件位于我的电脑本地。 在index.js 中,我有一个ajax 调用,它使用位于Web 服务器上的名为index.php 的页面来验证用户名和密码。 在index.php 中,我启动一个 session 并检查用户名和密码的身份验证并回显结果。如果成功,我将重定向到服务器上的 event.html 页面。 问题是,尽管index.php 和event.html 位于同一Web 服务器上,但 session 并未传递。我在 hindex.html 和 events.html 上看到两个不同的 session 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";
?>

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 文件都在服务器上。

编辑2: 我正在从本地 html 迁移到服务器 html。那么也许index.php 停止 session 而events.php 开始新 session ?

编辑3: 刚刚将 events.html 传递到我的电脑,因此没有从客户端移动到服务器 html。还是行不通。相同的域和相同的路径两个 php 文件和两个不同的 session 而不是一个。

编辑4: 我删除了所有标题。从我的电脑运行index.html时,出现以下错误:“XMLHttpRequest无法加载https://example.com/index.php。请求的资源上不存在“Access-Control-Allow-Origin” header 。因此不允许访问Origin“null” ”

最佳答案

即使您尚未启动 session ,$_SESSION 也会被设置(尽管为空),因此使用 !isset($_SESSION) 将始终返回 FALSE。

将代码更改为:

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

关于javascript - 使用ajax重定向后php session 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44273116/

相关文章:

javascript隐藏显示

jquery - 使用 jquery 数据表构建主从网格

php - 在后台运行数据库查询功能

javascript - Uncaught Error : [$injector:modulerr] Failed to instantiate module toastr

javascript - 使用 while 循环用数组动态包装索引

javascript - 如何在一定的时间间隔内重新执行一个函数?

PHP 单元测试

javascript - 带标题背景的滚动 html 表格

php函数将数组分成3部分而不留下余数

php - Ajax 不发布内联表编辑