2016-04-22 4 views
-1

У меня есть одностраничное приложение на основе страницы index.php, где я запускаю сеанс и отображаю первое содержимое. Затем я загружаю содержимое Ajax в разные div на основе ссылок, которые вы нажимаете.одностраничное приложение session_start error

Если я хочу получить доступ к массиву $_SESSION на загруженной странице (например, для отображения имени пользователя), мне нужно поставить session_start также на страницу, которую я загружаю через Ajax. Все отлично работает таким образом, но когда я вижу в журнале я вижу, что PHP бросает ошибку каждый раз, когда я загрузить одну из страниц с помощью Ajax, говоря, что

«сессия уже началась. Игнорирование session_start()».

Итак: с одной стороны мне нужно поставить session_start для доступа к массиву сеансов, а с другой стороны команда session_start игнорируется.

От index.php:

<?php 
require '../session_handler.inc.php'; 
require 'global_functions.php'; 
session_start(); 
if(isset($_SESSION['id1'])){ 
    $actusr=$_SESSION['id1']; 
} 

Образец Аякса вызов:

function loadContent(sourceUrl){ 
    $(".container").load(sourceUrl); 
} 

РНР мне нужно в верхней части страницы под названием:

<?php 
require '../../session_handler.inc.php'; 
require '../global_functions.php'; 
session_start(); 

Если я удалить session_start() $ _SESSION будет недоступна

Как я могу исправить эту ситуацию? Могу ли я получить доступ к массиву сеансов с загруженной страницы без запуска сеанса?

+0

Попробуйте удалить его из Аякса, как это часть скрипта вы работаете под. –

+0

@ Fred-ii- то я больше не буду загружать $ _Session массив –

+2

* Hm ... *, причудливый. Вы можете поделиться своим кодом? Не могу понять, как это сломается. У вас нет 2 'session_start();' где-нибудь в одном и том же файле? Или что-то еще вызывает это дважды? например, функция include/require и т. д.. –

ответ

0

Лучше использовать эту строку вместо session_dtart(). у вас может быть несколько сеансов session_start и использование сеанса между этими двумя.

if(session_id() == '') { 
    session_start(); 
} 
+0

@ Fred-ii-, добавлено описание – Mojtaba

+0

Это не решает проблему. Он запустит session_start –

+0

@LelioFaieta. Что у вас есть в файле session_handler, который вы включили в первую строку? – Mojtaba

0

Если вы тестируете на локальном WAMP или среде XAMP, я бы рекомендовал вам очистить кэш, закройте браузер (Не одна вкладка) и запустить приложение.

Попробуйте 1:

<?php 
     if(!isset($_SESSION)) 
     { 
      session_start(); 
     } 
    ?> 

Или

2: Если у вас есть PHP> = 5.4.0, лучше использовать это:

$status = session_status(); 
if($status == PHP_SESSION_NONE){ 
    //There is no active session 
    session_start(); 

}else 
if($status == PHP_SESSION_ACTIVE){ 
    //Destroy current and start new one 
    session_destroy(); 
    session_start(); 
} 

Надеется, что это помогает ..

+0

Я запустил веб-сервер для этого приложения. Это решение не решит проблему. Мне нужно передать массив сеанса на новую страницу любым другим способом, чем session_start –

0

move session_start(); в верхней части страницы

<?php 
 
session_start(); 
 
require '../session_handler.inc.php'; 
 
require 'global_functions.php'; 
 
if(isset($_SESSION['id1'])){ 
 
    $actusr=$_SESSION['id1']; 
 
}

session_handler.inc.php или global_functions.php может уже содержать session_start() так переместить session_start() в index.php к вершине. также обратите внимание, что это должно быть первое заявление в index.php

или введите код ниже на странице вверху индекса.PHP

<?php 
 
session_start(); 
 
?>

и удалить другие session_start() в index.php

+0

Index.php требует, чтобы сеанс начал проверять, был ли пользователь зарегистрирован, поэтому я не могу его удалить –

+1

@LelioFaieta не удаляйте его, просто переместите его на вверху страницы сразу после

+0

Вы знаете, что это ничего не меняет? Это не проблема с заголовками.Кодовая последовательность не влияет на результат вообще (проверено) –

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