【发布时间】:2017-05-30 22:52:01
【问题描述】:
我有一个 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";
?>
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 cannot load https://example.com/index.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' 因此不允许访问。”
【问题讨论】:
-
您的代码容易受到 SQL 注入的影响,您需要修复此问题。您正在以明文形式存储密码,您还需要修复他的密码。
-
这是一项正在进行的工作,而不是最终项目
-
没关系,正确执行会极大地改变逻辑,因此仅按您的方式执行然后一次性解决所有问题是不可行的。
-
会话没有传递到哪里?
-
下一页是 events.html,它从 events.php 获取 ajax 信息,所有这些信息都位于 Web 服务器上。但 events.php 的会话 ID 与 index.php 不同
标签: javascript php ajax