Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400

SESSION странно себя ведет

24.07.2018, 16:15. Показов 780. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

Есть Форма авторизации, захожу отправкой POST, сохраняю данные в $_SESSION

Если после обработки входа добавить header location то происходит перезагрузка и снова вижу форму авторизации (она исчезает если в $_SESSION есть определенные данные). Для теста вывожу при загрузке страницы print_r $_SESSION, он пустой...
Убираю header location прогружается то что должно (форма авторизации не отображается) авторизация успешна. Но если кликаю в адресную строку и нажимаю Enter (перехожу снова на этот адрес, делаю это чтобы не отправлялась форма что происходит во время перезагрузки), то снова вижу форму авторизации.

Не понимаю что происходит так как здесь есть ещё одна магия, но о ней позже)) Она мне просто ломает голову напрочь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.07.2018, 16:15
Ответы с готовыми решениями:

SQL в php странно себя ведет
$y = mysql_query("SELECT * FROM `itemsNal` WHERE `id_item` = ". $item . " and `color` = '$color_one' and `size` = '$size_one'"); вот...

Сортировка с использованием strnatcasecmp ведёт себя странно
Всем привет! Исходный массив: $array = array( 1.8, 1.52, 1.79, 1.59, 1.8,

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by
session_start(); if (!isset($_SESSION)) $_SESSION=0; echo "вы обновили страницу ".$_SESSION++." раз. "; echo "<br><a...

6
21 / 44 / 11
Регистрация: 08.02.2018
Сообщений: 443
24.07.2018, 16:16
Значит у вас массив пустой.
Код покажите.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
24.07.2018, 16:17
Код где?
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
24.07.2018, 18:25  [ТС]
Вот файл сессии и его я гружу include вначале загружаемой страницы
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    function startSession($isUserActivity=true) {
        return session_start();
    }
 
    function destroySession() {
        session_unset();
        session_destroy();
        return session_start();
    }
 
    startSession();
?>
Добавлено через 2 минуты
Хз как вам код поможет)) Потому что я рассказываю вам вторую часть этой чудесной истории:

На сайте есть 2 каталога:
catalog1/
catalog2/

Авторизация на этих путях одинаковая ( файлы один в один )
На одном каталоге все отрабатывает как надо,
На втором происходит то о чем я написал вышел)))

Я не понимаю еще раз говорю какой вам нужен код, ну сейчас что то накидаю)

Добавлено через 1 минуту
Вот главный файл
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
    include("../conf/start.php");
    include("../conf/session.php");
 
    $sitemain = $_SERVER['HTTP_HOST'];
    $protocol = 'http';
    if (isset($_SERVER['HTTPS']))
        $protocol = 'https';
 
    $url = $_SERVER['REQUEST_URI'];
    $fst1 = strpos($url, '/', 1)+1;
 
    $market = substr($url,1,$fst1-2);
    $_SESSION['market'] = $market;
    print_r($_SESSION);
 
    
 
    if (isset($_SESSION[$market]['SID'])) {
        if (isset($_GET["exit"])) {
            include("../tmp/CRM3.php");
            include("../tmp/nofooter_crm.php");
        } else {
                    
            echo "ZASHEL";
            exit();
            
            include("../tmp/header_crm.php");
            include("../tmp/CRM3.php");
            include("../tmp/footer_crm.php");
        }
    } else {
        include("../tmp/CRM3.php");
        include("../tmp/nofooter_crm.php");
    }
?>
Добавлено через 3 минуты
А вот файл CRM3

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
if(isset($_POST['buton'])) {
        if ((!empty($_POST['login'])) && (!empty($_POST['passwrd']))) {
            $login = trim($_POST['login']);
            $password = trim($_POST['passwrd']);
            
            $ql = DB::query($exists);
            $check=DB::num_rows($ql);
            if ($check>0) {
                $objUserSes=DB::fetch_object($ql);
                $id_user = $objUserSes->id;
 
                if ($durl <> $market ) {
                    header('location: '.$protocol.'://'.$sitemain.'/'.$durl.'/CRM3.php?login='.$login.'&password='.$password);
                    exit();
                } else {
                    $_SESSION[$market]['id_user'] = $id_user;
                    $_SESSION[$market]['id_project'] = $id_project;
                    $_SESSION[$market]['errorentry'] = '0';
                    
                    $_SESSION[$market]['podpiska'] = $objUserSes->podpiska;
                    $_SESSION[$market]['laststep'] = $objUserSes->laststep;
                
                    $_SESSION[$market]['SID'] = md5(crypt($objUserSes->id,$objUserSes->phone));
                    $_SESSION[$market]['lastactivity'] = time();
 
                    
                    $_SESSION[$market]['id_project_data'] = $id_project_data;
                    
                    if ($objUserSes->name <> '') {
                        $_SESSION[$market]['name'] = $objUserSes->name;
                    }
 
                }
 
                    //exit();
                
                //header('location: '.$protocol.'://'.$sitemain.'/'.$market.'/CRM3.php');
            } else {
                $_SESSION[$market]['errorentry'] = '1';
                echo 'Логин или пароль введены неверно!';
            }
        }
    }
    echo "$market<br>";
    echo $_SESSION[$market]['id_user'];
    echo "I<br>";
    echo $_SESSION[$market]['user_phone'];
    echo "P<br>";
    echo $_SESSION[$market]['SID'];
    echo "S<br>";
    if ( ((isset($_SESSION[$market]['id_user'])) && (isset($_SESSION[$market]['user_phone']))) && (md5(crypt($_SESSION[$market]['id_user'],$_SESSION[$market]['user_phone'])) == $_SESSION[$market]['SID']) ) {     
        
    } else {
        $loginget = '';
        if (isset($_GET['login'])) {
            $loginget = $_GET['login'];
        }
        $passwordget = '';
        if (isset($_GET['password'])) {
            $passwordget = $_GET['password'];
        }
        echo '<form method="post" class="forma">
            <input name="login" type="text" placeholder="Логин для доступа к CRM" value="'.$loginget.'" required>
            <input name="passwrd" type="password" placeholder="Пароль для доступа к CRM" value="'.$passwordget.'" required>
            <button type="submit" name="buton">Войти</button>  
            <a class="recovery" href="'.$protocol.'://'.$sitemain.'/'.$market.'/recovery.php">Забыли пароль? Восстановить</a>';
            if (isset ($_SESSION[$market]['errorentry'])){
 
                if  ($_SESSION[$market]['errorentry'] == '1'){
 
                    echo '<p class = "forma_oshibka"> Логин или пароль введены неверно! </p>';
                    destroySession();
                } 
            }
            echo '</form>';
 
    }
Добавлено через 27 секунд
Ну код с запросами в БД я конечно же вырезал...

Добавлено через 1 минуту
Цитата Сообщение от vino0s Посмотреть сообщение
if ($durl <> $market ) {
* * * * * * * * * * header('location: '.$protocol.'://'.$sitemain.'/'.$durl.'/CRM3.php?login='.$login.'&password='.$pa ssword);
* * * * * * * * * * exit();
* * * * * * * * }
Вот эта часть прекрасно отрабатывает ( переходит из одного каталога в другой если введены логин и пароль от отличного каталога в сравнении с тем в котором находимся сейчас )

Добавлено через 43 минуты
Короче, я сейчас видео записал, сейчас обработаю скину... Это реально что то магическое, я не понимаю

Добавлено через 48 минут
Вот я файл сессии поменял, и все равно проблема та же))
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
function startSession($isUserActivity=true) {
    // Если сессия уже была запущена, прекращаем выполнение и возвращаем TRUE
    // (параметр session.auto_start в файле настроек php.ini должен быть выключен - значение по умолчанию)
 
    $sessionLifetime = 300; //5 минут
 
    if ( isset($_SESSION['exit']) )
    {
        destroySession();
        return session_start();
    }
 
    if ( session_id() ) return true;
    
    ini_set('session.cookie_lifetime', $sessionLifetime);
    
    if ( $sessionLifetime ) ini_set('session.gc_maxlifetime', $sessionLifetime);
    
    $t = time();
    
    if ( $sessionLifetime ) {
        // Если таймаут отсутствия активности пользователя задан,
        // проверяем время, прошедшее с момента последней активности пользователя
        // (время последнего запроса, когда была обновлена сессионная переменная lastactivity)
        if ( isset($_SESSION['lastactivity']) && $t-$_SESSION['lastactivity'] >= $sessionLifetime ) {
            // Если время, прошедшее с момента последней активности пользователя,
            // больше таймаута отсутствия активности, значит сессия истекла, и нужно завершить сеанс
            destroySession();
            return session_start();
        }
        else {
            // Если таймаут еще не наступил,
            // и если запрос пришел как результат активности пользователя,
            // обновляем переменную lastactivity значением текущего времени,
            // продлевая тем самым время сеанса еще на sessionLifetime секунд
            $_SESSION['lastactivity'] = $t;
        }
    } else {
        return session_start();
    }
}
 
function destroySession() {
    if ( session_id() ) {
        // Если есть активная сессия, удаляем куки сессии,
        setcookie(session_name(), session_id(), time()-$sessionLifetime);
        setcookie("prod", '', time()-$sessionLifetime);
        setcookie("name", '', time()-$sessionLifetime);
        setcookie("phone", '', time()-$sessionLifetime);
        setcookie("offer", '', time()-$sessionLifetime);
        setcookie("offer2", '', time()-$sessionLifetime);
        setcookie("SID", '', time()-$sessionLifetime);
        //setcookie("user", '', time()-$sessionLifetime);
        // и уничтожаем сессию
        unset($_SESSION['user_id']);
        unset($_SESSION['user_phone']);
        unset($_SESSION['SID']);
        unset($_SESSION['exit']);
        unset($_SESSION['lastactivity']);
    }
        session_unset();
        session_destroy();
        
}
 
startSession();
 
?>
Добавлено через 17 минут
Цитата Сообщение от maxoun Посмотреть сообщение
Значит у вас массив пустой.
Цитата Сообщение от vino0s Посмотреть сообщение
сохраняю данные в $_SESSION
Написано же СОХРАНЯЮ

Добавлено через 54 секунды
https://yadi.sk/i/8SVyItn_3ZXRiZ
Вот видео на Яндекс Диске

Добавлено через 1 минуту
Первая часть до СМЕНЫ ЛОГИНА - это тот каталог который работает.
Затем меняю логин, попадаю в другой каталог, и в нем не работает. КОД АБСОЛЮТНО ОДИНАКОВЫЙ

Добавлено через 1 минуту
Я чистил полностью куки и сессию и пробовал сразу начинать со второго каталога (на работающего)

Добавлено через 1 минуту
Помогите, я не понимаю такую магию... Где вообще максимально подробная инфа по сессиям есть? С описанием ошибок и странностей, я бы почитал)
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
24.07.2018, 18:40
На видео мужик с усами все закрывает
0
11 / 11 / 8
Регистрация: 26.03.2014
Сообщений: 400
24.07.2018, 19:46  [ТС]
А что ты там хочешь увидеть? Я видео записал чтобы не объяснять что это реально: В одном каталоге сессия сохраняет все данные, а в другом каталоге нет, хотя КОД ОДИН И ТОТ ЖЕ. СИМВОЛ В СИМВОЛ

Добавлено через 44 секунды
Я потому и написал сразу что код вам не поможет... Это аномалия, мне бы инфу какую нибудь... Просто куда копать.

Добавлено через 32 секунды
Весь код написан правильно, но что то происходит в самой сессии

Добавлено через 1 минуту
Цитата Сообщение от andyyy Посмотреть сообщение
На видео мужик с усами все закрывает
там видно сто окошко меняется, видно ссылка в адресе меняется. все показывать не имею прав

Добавлено через 1 минуту
Пропадает часть массива SESSION

Вот я уже описывал проблему, только она была озвучена иначе, до этого грубо говоря все происходило из одного аккаунта, теперь я добавляю другой, и все так же, проблема не решена

Добавлено через 7 минут
Озвучу так - Двумерные массивы в SESSION не работают

Добавлено через 2 минуты
PHP
1
2
3
4
$_SESSION['aaa'] = 'bbb';
            $_SESSION['cc'] = 'bds';
            $_SESSION['123cc'] = 'b';
            $_SESSION['70000000000']['ccc'] = 'ddd';
Вот я во время авторизации добавляю такие данные
И выводит всё кроме двумерной.

Добавлено через 8 минут
После нескольких обновлений он вывел двумерный массив.

Цитата Сообщение от vino0s Посмотреть сообщение
$_SESSION[$market]['id_user'] = $id_user;
* * * * * * * * * * $_SESSION[$market]['id_project'] = $id_project;
Ну вот из этого кода, перед этим я добавлял
PHP
1
2
echo "$market $id_user $id_project";
exit();
мне выдало правильные данные. НО ПОЧЕМУ ОНИ НЕ СОХРАНИЛИСЬ В СЕССИИ???

Добавлено через 12 минут
Таааак, видимо это из за неявного преобразования типов, я пол часа тыркал такую запись:
PHP
1
$_SESSION['70000000000']['id_user2'] = $market;
Не добавлялось, а затем попробовал так:
PHP
1
$_SESSION['v70000000000']['id_user2'] = $market;
И она добавилась.
Но когда делал так:
PHP
1
$_SESSION[string('70000000000')]['id_user2'] = $market;
Не работало. Как обойти преобразование типов. В сессию не пропускает числовые значения.
700000000 - это имя второго каталога.
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
24.07.2018, 22:37
Второй каталог переименовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.07.2018, 22:37
Помогаю со студенческими работами здесь

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent
Пытаюсь сделать корзину товаров, проблема с session_start выдает вот такую ошибку: Warning: session_start() : Cannot send session cookie -...

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent
У меня на компе все ОК, но после загрузки на хост получаю предупреждения и нечего не работает Warning: session_start() : Cannot send...

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent
Открыл движок а точне файл index.php та начало кода &lt;?php /** * Файл index.php расположен в корне CMS является единственной...

Warning: session_start() [function.session-start]: Cannot send session cookie
Warning: session_start() : Cannot send session cookie - headers already sent by (output started at /home/olzsu/public_html/index.php:1) in...

Warning: session_start() [function.session-start]: Cannot send session cache
Привет. Сегодня решиль сделать у себя в сайте регистрацию она работает нормально все без проблем, но проблема с сессии у меня вот что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru