У меня есть 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.