我有一個index.html登錄頁面,其中附帶一個名爲index.js的JavaScript頁面。這兩個文件在本地電腦上。 在index.js中,我有一個ajax調用,它使用名爲index.php的頁面對位於Web服務器上的用戶名和密碼進行身份驗證。 在index.php中,我啓動會話並檢查用戶名和密碼的身份驗證並回顯結果。如果成功,我將重定向到服務器上的event.html頁面。 問題是雖然index.php和event.html位於同一個Web服務器上,但會話未被傳遞。我看到在hindex.html和events.html重定向到ajax後php會話丟失
index.js兩個不同的會話cookie:
$.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停止會話和events.php開始一個新的會話?
編輯3: 剛剛通過events.html到我的電腦,所以沒有從客戶端移動到服務器的HTML。還是行不通。相同的域和相同的路徑兩個PHP文件和兩個不同的會話,而不是一個。
編輯4: 我刪除了所有標題。當從我的電腦上運行index.html時,它給了我這個錯誤:「XMLHttpRequest無法加載https://example.com/index.php。請求的資源中沒有'Access-Control-Allow-Origin'標頭,因此不允許Origin'null'訪問。
您的代碼容易受到SQL注入,就需要解決這個問題。你以明文存儲密碼,你還需要修復他的密碼。 – Enstage
這是一項正在進行的工作,不是最終的項目 – t1a2l
無關緊要,正確地大幅改變邏輯,所以按照您的工作方式進行修改並不可行,然後一次性修復。 – Enstage