сеанс недоступен в сценарии, расположенном в подпапке, вызываемой из jquery ajax? - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть header.php, который включен в мой index.php -файл в самом верху, прежде чем что-либо еще:

<?php require 'setup/header.php';  ?>

Заголовок включает в себя набор файлов из того же каталога, и одиниз них session.inc.php:

<?php 
if(!isset($_SESSION)){
    session_name('__KD');
    session_set_cookie_params(0,'/','','',true);
    session_start();
}

if(!isset($_SESSION['visitor'])) { 
    if (empty($_SERVER['HTTP_REFERER'])) { $_SERVER['HTTP_REFERER'] = 'direct'; }
    $_SESSION['visitor']['ip'] = ipaddress();  //  personal function to retrive the users IP adress
    $_SESSION['visitor']['ua'] = $_SERVER['HTTP_USER_AGENT'];
    $_SESSION['visitor']['ref'] = $_SERVER['HTTP_REFERER'];
    $_SESSION['visitor']['arr'] = $now[0];  //  = getdate();
}
?>

В разделе <body> моего index.php есть файл load.tpl.php, который обрабатывает содержимое и фактический запрос страницы.И в самом низу, все еще внутри тега <body>, включен весь код JavaScript.

<body>
<?php require 'content/load.tpl.php'; ?>
<?php include 'assets/js/scripts.combined.js'; ?>
</body>

load.tpl.php :

<nav id="site-navigation" class="noprint">...</nav>

<main id="site-content">
<?php 
/**
 *  $_PAGE['file'] is a variable that holds the actual filename from a db request
 */
include $_PAGE['file'].'.php';
?>
</main>

<footer id="site-footer">...</footer>

Эта структура гарантирует, что все страницы имеют доступ ко всему, что есть в header.php (функциях, классах, сессиях, БД, константах, переменных и т. Д., А также в javascript).

Вот мой javascript / jqueryajax-сценарий, который выполняется, когда я нажимаю кнопку отправки из включенного файла подкачки - Search.pg.php в этом случае:

$("#RequestRecipe").submit(function(e){
    var _POST = $(this).serialize();  //  form $_POST[]s
    var script = 'scripts/RequestRecipe.ajax.php';  //  script to be executed
    e.preventDefault();
    $.ajax({type:'POST', url:script, data:_POST})
        .done(function(response){
            console.log(response);
        })
        .fail(function(response){
            console.log(response);
        });
});

Наконец, к рассматриваемой проблеме:
RequestRecipe.ajax.php
Этот скрипт находится в подпапке из index.php и в некотором роде изолирован от index.php.Это означает, что все, что доступно с сайта, недоступно в этом автономном скрипте:

root/
    index.php
    assets/js/scripts.combined.js  (this is where the ajax-script is located)
    setup/header.php (includes session.inc.php from same directory)
    content/Search.pg.php (is included by load.tpl.php into the index.php-file)
    scripts/RequestRecipe.ajax.php

RequestRecipe.ajax.php

<?php 
    session_start();
    print_r($_SESSION);  //  this is empty 
?>     

КогдаЯ нажимаю кнопку подтверждения, которая выполняет ajax-вызов, который делает запрос на RequestRecipe.ajax.php, $ _SESSION недоступен.Сеанс возвращается пустым.

Что я делаю не так?

Когда сеанс доступен с каждой страницы при навигации, но не при выполнении вызова ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...