2015-04-20 3 views
0

Я сталкиваюсь с этой странной проблемой. У меня есть страница PHP, где я устанавливаю переменную сеанса. Затем я загружаю другую страницу в тег DIV этой страницы, используя $ (''). Load (URL); Но загружаемая страница не сохраняет сеанс и уничтожает текущий, как только он будет загружен. Но на той же странице сохраняется сессия, если она хранится в том же каталоге вместе с главной страницей.Сессия PHP не работает в подкаталогах

Я видел аналогичный вопрос here. Но это не дает никакого решения.

Вот мой код Главная: sample.php

<?php 
session_start(); 
echo session_id(); 
echo "<br>"; 
$_SESSION['test'] = "hello"; 
var_dump($_SESSION); 
echo "<br>"; 
?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title></title> 
    </head> 
    <body> 
     <?php 
     echo $_SESSION["test"]; 
     ?> 
     <div id="samedir" style="border: 1px solid #000;"> 

     </div> 
     <br> 
     <div id="subdir" style="border: 1px solid #000;"> 

     </div> 
     <input type="button" value="hello" id="hellobtn"/> 
     <script type="text/javascript" src="js/jquery-1.11.0.js"></script> 
     <script> 
      $('#hellobtn').click(function() { 
       $('#samedir').load("sample1.php"); 
       $('#subdir').load("forms/sample1.php"); 
      }); 
     </script> 
    </body> 
</html> 

Вторая страница: sample1.php

<?php 
ob_start(); 
if(!isset($_SESSION)) 
    session_start(); 
echo session_id(); 
echo "<br>"; 
var_dump($_SESSION); 
ob_flush(); 
?> 

Вы можете увидеть здесь у меня есть 2 вызова нагрузки в главной странице $ ('#samedir') нагрузки ("sample1.php"). это один груз из той же директории и отвалов выход

array(1) { ["test"]=> string(5) "hello" } 

В то время как второй вызов $('#subdir').load("forms/sample1.php"); отвалы это:

array(0) { } 

Но все прекрасно работает в моем локальном хосте (MAMP), но не в моем хостинг-сервере. Спасибо, ребята.

+0

, что если вы просто выполняете оператор if + echo $ _session ['test'] на sample1.php? – Julo0sS

+0

Некоторые пробелы/новые строки перед открытием тега php?Вы должны включить отображение ошибок и проверить возвращаемое значение 'session_start()'. Кроме того, ваш результат не соответствует сценарию, где идентификатор сеанса? – jeroen

+0

'sample1.php':' session_start(); 'в любом условии .. не только' if (! Isset ($ _ SESSION)) '.. –

ответ

0

Сессия создает файл во временном каталоге на сервере, где хранятся зарегистрированные переменные сеанса и их значения. Эти данные будут доступны для всех страниц сайта во время этого визита.

Местоположение временного файла определяется настройкой в ​​файле php.ini с именем session.save_path. так что просим проверить этот путь.

Также [session-save-path()] [1] Получить и/или установить текущий путь сохранения сеанса.

Я думаю, вам не нужно писать эту строку и проверить ваш php.ini для правильного пути.

для сессии я нашел полезную статью http://www.tutorialspoint.com/php/php_sessions.htm

Каталог никак не влияет на состояние сеанса (все каталоги данного веб-сайта Apache-PHP будет иметь доступ к той же сессии в стандартной конфигурации). Вам не нужно использовать session_save_path().

Я думаю, что проблема частично заключается в том, что вы устанавливаете «uid» для себя ($ _SESSION ['uid'] = $ _SESSION ['uid'];) - поэтому потенциально никогда не устанавливайте его на значение - и потенциально перенаправлять бесконечно, если он не установлен.

Я предлагаю этот простой тест, чтобы убедиться, что ваши сеансы, на самом деле, работа:

/session_set.php

<?php 
    session_start(); 
    $_SESSION['uid'] = 123; 

/sub_dir/session_get.php

<?php 
    session_start(); 
    echo $_SESSION['uid']; 
+0

Hi @Write спасибо за объяснение. Но любезно проверьте код выше. Я не использовал ничего, как $ _SESSION ['uid'] = $ _SESSION ['uid']; На странице sample.php я установил $ _SESSION ['test'] = "hello"; И на странице sample1.php у меня есть echo $ _SESSION ['test']; после начала сеанса. – blisssan

Смежные вопросы