Просто новичок здесь, пожалуйста, простите мои ошибки.
Я работаю над сайтом с использованием .shtml-страниц (SSI). Я пытаюсь включить PHP-скрипт в мою .shtml-страницу. До этого момента все работает нормально: PHP-скрипт включен, и он делает то, для чего он предназначался. Вот пример. Существует домашняя страница (index.shtml), включая сценарий под названием security_check.php с этой директивой:Сессия PHP не работает, когда скрипт включен в страницы SHTML
<!--#include virtual="includes/security_check.php?idOp=000&idPage=0000" -->
Это PHP код security_check.php:
<?php
session_start();
include('config.php');
include('myfunctions.php');
include('security_functions.php');
$idOp = $_GET['idOp'];
$idPage = $_GET['idPage'];
$allowedReferer = array();
// Connection to the database (defined in myfunctions.php)
$link = DB_Connect($DBhost, $DBuser, $DBpass, 1, $DBname);
// Check if the PHP session already exists. If not, create one
// (that is insert a record in the DB and returns the id, which
// will be stored in the PHP session variable).
// user ID is 0 because not logged yet
if (!isset($_SESSION['idSess'])) {
$_SESSION['idUser'] = 0;
$_SESSION['idSess'] = create_session(); // security_functions.php
}
// Please note that create_session() correctly use $_SESSION['idUser']
// in order to do its work, even if it's not passed as a parameter
// (as it should be: $_SESSION is a superglobal!) and the same goes
// for activity_supervisor().
// Defined in security_functions.php:
// it uses both $_SESSION['idUser'] and $_SESSION['idSess']
activity_supervisor($idPage,$allowedReferer,2,$link);
mysql_close($link);
?>
В этом точка, домашняя страница отображается правильно, и в ней есть кнопка «Зарегистрироваться» , вызывая sign.shtml. Эта страница sign.shtml включают тот же security_check.php сценарий с точно такой же включить директиву уже видели выше значения параметра idPage, который в данном случае является 0001.
кроме я бы ожидать, что сценарий к признать сессию PHP и, следовательно, не создание нового сеанса, но действительно новый сеанс создается каждые раз.
Я уже прочитал все другие сообщения, связанные с сессиями PHP, которые не работают, и я даже попробовал предлагаемые там решения.
- session_start() написано сверху каждого сценария, потому что есть только один скрипт
- session.save_path равен/вар/Lib/PHP/сессии и записываемые веб-сервером
- Я уже пытался для установки session.gc_probability = 0 и перезапуска веб-сервера (безрезультатно, поэтому я вернулся к session.gc_probability = 1)
- Я пробовал с разными браузерами (а именно с Firefox и Chrome) с теми же результатами
Итак, я попробовал следующий тест (обратите внимание на эти две пустые строки перед session_start(): я всегда использую инструкции для повышения удобочитаемости) cre живать простой test.php скрипт
<?php
session_start();
if (!isset($_SESSION['foo'])) {
$_SESSION['foo'] = 1;
echo ('Value is '.$_SESSION['foo'].'<br/>');
echo ('<a href="test.php">Refresh</a>');
}
else {
$_SESSION['foo']++;
echo ('Value is '.$_SESSION['foo'].'<br/>');
echo ('<a href="test.php">Refresh</a>');
}
?>
Ну, верите или нет, каждый раз, когда я ударил «Обновить», значение является увеличивается, поэтому PHP распознает сессии (скрипт test.php внутри тот же домен, что и страницы index.shtml и sign.shtml).
Я даже пытался заставить PHP-скрипт показать ссылку на файл .html (не .shtml), который затем показывает ссылку на test.php. Он работает правильно!
На самом деле кажется, что сеанс неверно установлен только, когда PHP-скрипт включен в .shtml-страницу, даже если я не вижу причин для этого. Может быть, вы знаете, почему и, прежде всего, как обойти это скучное поведение? Это особенность? Это зависит от настройки параметра в php.ini?
Итоговые советы:
ОС: CentOS 6.3 с 2.6.32-279.el6.x86_64 ядра
версии сервера: Apache/2.2.15 (Unix)
PHP 5.3.3
Сервер мой, поэтому я могу настроить все, если необходимо.
Спасибо заранее и прошу прощения за длинный пост: Я пытался сделать это , что PHP-сессии прекрасно работают в любой другой ситуации, о которой я знаю.
TL; DR, но ... Знаете ли вы, что вы вставляете ** вывод ** скрипта PHP, а не его код? –
Было бы намного проще, если бы вы просто использовали PHP include вместо SSI для вашего скрипта сеанса. – Derek
Вы не можете вызвать 'session_start()' или что-нибудь, что нужно, чтобы изменить заголовки, просто используя mod_include (SSI). Либо подключайте URL-адрес непосредственно к скрипту PHP, либо используйте ESI. – symcbean