gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:36:54 25 4
gpt4 key购买 nike

我有一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com