Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Почему не работает сессия?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Sem2001
Отправлено: 05 Августа, 2015 - 10:41:54
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




Добрый день. Подскажите что не так.
Переменные в одном случае видны из разных скриптов, в другом нет.
вот вырезка
1. файл
<?php
if(session_id() == '') session_start();

ini_set('display_errors',1);
error_reporting(E_ALL);

$UserName = "Гость";
$Organization = "Демо";

$_SESSION['username']= $UserName;
$_SESSION['organization']= $Organization;
....
кнопка с переходом на 2й файл
....
?>

2. файл
<?php
if(session_id() == '') session_start();

ini_set('display_errors',1);
error_reporting(E_ALL);

include ("functions.php");

$UserName = $_SESSION['username'];
$Organization = $_SESSION['organization'];
....

?>

в итоге
Notice: Undefined index: username in ..../test.php on line 13
Notice: Undefined index: organization in ..../test.php on line 14

Смотрел папку куда сохраняется сессии (установил свой путь в обеих файлах), почему-то создаются 2! файла с ID сессией, в обоих есть переменные username и organization. Почему создается второй файл не понятно, или так должно быть?
(Добавление)
Если что, то в файле functions.php не происходит уничтожения сессии, только набор функций.
 
 Top
Мелкий Супермодератор
Отправлено: 05 Августа, 2015 - 10:59:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Почему вы сессию стартуете, только если SID'а пустой?


-----
PostgreSQL DBA
 
 Top
Sem2001
Отправлено: 05 Августа, 2015 - 11:04:40
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




Мелкий пишет:
Почему вы сессию стартуете, только если SID'а пустой?


Пробовал без if(session_id() == ''), результат тот же.

Что самое интересное есть 3й файл с аналогичным кодом, но с проверкой введенных данных и в случае совпадения присваивания значения тем же самым переменным значения и переход опять же на файл 2. и он работает!
пример 3го файла

ajax
....
$user_password = GetUserPassword($login, $organization);
if ($password == $user_password)
{
$_SESSION['username']=$login;
$_SESSION['organization']=$organization;
...

js
переход на 2й файл
 
 Top
andrewkard
Отправлено: 05 Августа, 2015 - 11:12:01
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Во втором файле измените if(session_id() == '') session_start(); на session_start();
 
 Top
Sem2001
Отправлено: 05 Августа, 2015 - 11:24:56
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




andrewkard пишет:
Во втором файле измените if(session_id() == '') session_start(); на session_start();


Убрал. Тоже самое.
Должен ли создаваться файл со вторым session_id? Как вообще возможно создать второй session_id не закрывая первый, и если я правильно понимаю при закрытии сессии файл должен удалиться. Получается что сайт работает с двумя сессиями?
 
 Top
andrewkard
Отправлено: 05 Августа, 2015 - 11:42:49
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Уберите и в первом Улыбка.
Выведите после занесения в сессию в первом файле:


и так же в начале второго.
 
 Top
Sem2001
Отправлено: 05 Августа, 2015 - 11:54:42
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




andrewkard пишет:
Уберите и в первом Улыбка.
Выведите после занесения в сессию в первом файле:


и так же в начале второго.



Убрал везде.
Команда "print_r($_SESSION);" во втором файле выводит: Array ( )
А если из третьего во второй (где авторизация), то: Array ( [username] => ИМЯ. [organization] => ОРГАНИЗАЦИЯ)
(Добавление)
еще интересный момент, если вначале сделать переход из файла 3 в файл 2 (работающий вариант), то потом при переходе из файла 1 в файл 2 (не работающий вариант) тоже работает и дает результат: Array ( [username] => Гость [organization] => Демо )
(Добавление)
Не знаю уже на что грешить. Все перепробовал, истина где-то на поверхности...
Значения в переменные сессии заносятся в обоих случаях одиково $_SESSION['username']="Гость", переход на эти страницы так же одинаковый location.href = "2 файл". Единственное отличие работающего кода, от не работающего это в одном случае идет проверка введенных данных пользователем, а в не рабочем эти данные уже жестко прописаны в скрипте.
(Добавление)
вот функция перехода к файлу №2


function StartTest(obj)
{
num = obj.getAttribute('data-testid');
if (obj.getAttribute('data-demo')!=='true')
{
//ЗДЕСЬ ПРОВЕРКА ВВЕДЕННЫХ ДАННЫХ С ДАННЫМИ В БАЗЕ
$.ajax({
type: 'POST',
url: 'command.php',
data: {
'command': 'starttest',
'testid': num
},
success: function(data) {
var test_id = sessionStorage.getItem('test_id');
if ( (test_id == null) || (test_id != num) )
sessionStorage.removeItem('remaining');
sessionStorage.setItem('restart', 1);
location.href = 'test.php?id=' + num+'&h='+data+'&public='+obj.getAttribute('data-public'); 1ый вариант перехода к файлу2
}
});
}
else
{
//ЗДЕСЬ НЕТ ПРОВЕРКИ А ДАННЫЕ ЖЕСТКО ПРОПИСАНЫ
sessionStorage.removeItem('remaining');
sessionStorage.setItem('restart', 1);
location.href = 'test.php?id=' + num+'&demo='+obj.getAttribute('data-demo'); 2ый вариант перехода к файлу2
}

}


в файле command.php нет никаких манипуляций с сессией, только сверяет данные

(Отредактировано автором: 05 Августа, 2015 - 11:58:00)

 
 Top
andrewkard
Отправлено: 05 Августа, 2015 - 13:56:22
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Нужно разбираться что к чему, вот 2 простых файла, все работает:
t1.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. ini_set('display_errors',1);
  5.  
  6. $UserName = "Гость";
  7. $Organization = "Демо";
  8.  
  9. $_SESSION['username']= $UserName;
  10. $_SESSION['organization']= $Organization;
  11.  
  12. ?>
  13.  
  14. <html>
  15. <a href="/t2.php">GO</a>
  16. </html>
  17.  


t2.php
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB