我遇到了一个非常奇怪的问题。我最近重写了将代码从mySQL更新到mySQLi的代码。我有一个名为“ config.php”的配置文件,它通过PDO和mySQLi都与数据库建立了连接,
$mysqli = new mysqli("localhost", "XXXX", "XXXX", "XXXXX");
$db = new PDO('mysql:host=localhost;dbname=XXXX;charset=utf8', 'XXXX', 'XXXX');
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
我大多数其他PHP脚本将使用require_once'config.php',在那些页面上,我可以通过执行print_r($ _ SESSION)来查看我的会话变量,这将返回此数组:
Array ( [lastseen] => 1543419158 [lang] => en [username] => 1 [userid] => 1 [staff] => [mod] => [catchLegends] => 1 [special] => [dogs] => [trquest] => 1 [gold1] => [gold2] => [gold3] => )
但是,自更新以来,我的ajax文件也通过require_once调用配置文件,当我尝试查看会话变量时,它仅提供以下内容:
Array ( [lastseen] => 1543419470 [lang] => en )
我不确定该数组的其他字段发生了什么。有人有线索吗?
作为参考,此ajax文件名为“ map_ajax.php”,并通过“ map.php”调用,如下所示:
$.get('map_ajax.php?map=<?php echo $map; ?>&x='+x+'&y='+y+'&rnd='+z+'', function(result) {
var res = jQuery.parseJSON(result);
.......(more code).....
}
感谢任何帮助,因为我对ajax绝对陌生。
config.php中的会话代码:
@session_save_path("/tmp");
@session_start();
if (isset($_SESSION['lastseen']) && (time() - $_SESSION['lastseen'] > 1800)) {
// last request was more than 30 minutes ago
session_unset(); // unset $_SESSION variable for the run-time
session_destroy(); // destroy session data in storage
} else {
$_SESSION['lastseen'] = time();
}
if (isset($_SESSION['userid'])) {
$uid = (int) $_SESSION['userid'];
$user = mysqli_fetch_object($mysqli->query("SELECT * FROM `users` WHERE `id`='{$uid}'"));
// Check if they are banned
if ($user->banned == 1 && $filename != 'logout.php') {
header('Location: logout.php');
die();
}
$time = $_SESSION['lastseen'];
$mysqli->query("UPDATE `users` SET `lastseen`='{$time}' WHERE `id`='{$uid}' LIMIT 1");
}
$allowed_lang = array('en', 'es', 'ph', 'lv');
if(isset($_GET['lang']) === true && in_array($_GET['lang'], $allowed_lang) === true) {
$_SESSION['lang'] = $_GET['lang'];
} else if(isset($_SESSION['lang']) === false){
$_SESSION['lang'] = 'en';
}
include 'lang/' . $_SESSION['lang'] . '.php';
define('GOT_CONFIG', true);
答案 0 :(得分:1)
终于找到了根本原因。 Map_ajax.php是用UTF-8-BOM而不是UTF-8编码的。该问题已解决:')
答案 1 :(得分:0)
我通过在php.ini中启用输出缓冲来解决此问题。 但是,我读到这不是最佳/推荐的解决方案。但是,我似乎找不到其他方法来解决这个问题.....:(