>

정말 이상한 문제가 발생했습니다. 최근에 코드를 다시 작성하여 mySQL에서 mySQLi로 업데이트했습니다. PDO와 mySQLi로 데이터베이스에 연결하는 'config.php'라는 구성 파일이 있습니다 :

$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] => )

업데이트 이후, 세션 변수를 보려고 할 때 require_once를 통해 구성 파일을 호출하는 내 ajax 파일은 다음과 같은 결과 만 제공합니다.

Array ( [lastseen] => 1543419470 [lang] => en )

어레이의 다른 필드에 무슨 일이 있었는지 잘 모르겠습니다. 누군가 단서가 있습니까?

이 아약스 파일 이름은 '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).....
}

아약스를 처음 접했을 때 도움을 주시면 감사하겠습니다.

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);

  • 답변 # 1

    마지막으로 근본 원인을 찾았습니다. Map_ajax.php는 UTF-8 대신 UTF-8-BOM으로 인코딩되었습니다. 이 문제가 해결되었습니다 : ')

  • 답변 # 2

    php.ini에서 출력 버퍼링을 활성화하여이 문제를 해결했습니다. 그러나 이것이 최적/권장 솔루션이 아니라는 것을 읽었습니다. 그러나이 문제를 해결하는 다른 방법을 찾지 못했습니다 ..... : (

관련 자료

  • 이전 python - 데이터 프레임 사전 데이터 프레임 이름 선택
  • 다음 javascript - 전자 메뉴를 사용하여 각도 7 탐색을 실행하는 방법