156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792

Странное поведение сессии

23.01.2023, 17:47. Показов 1440. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Не могу понять, почему в сессии идет не то, что в нее записано.

На индексной странице есть код:
PHP
1
2
3
4
    $uri = $_SERVER['REQUEST_URI'];
    $_SESSION['uri'] = $uri; 
 
    echo "<br>Адрес страницы: $uri ><br>";
При этом выводится сообщение:
Адрес страницы: /wowa/

Так оно и должно быть.

А на регистрационной форме, подтягивающейся через Аякс, есть контрольный код:
PHP
1
2
    $uri2 = $_SESSION['uri'];
    file_put_contents('1.txt', $uri2);
И я сильно надеялся, что в текствый файл запишется то самое, что видно на индексной странице. Но в текстовом файле запись
/favicon.ico

Чтобы понять, что за чудеса, я в индексном файле изменил код вот так:
PHP
1
$_SESSION['uri'] = 12345;
И теперь в текстовом файле 12345.

Менял имя uri на другое, на результат не повлияло.

Не могу понять, почему так происходит...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.01.2023, 17:47
Ответы с готовыми решениями:

странное поведение сессии
Всем привет!!!! Многоуважаемые гуру php, подскажите пожалуйста вот такую вещь. Сделал на сайте регистрацию, потом авторизацию. Всё...

Странное поведение с нулем
Здравствуйте! В адресной строке передаю параметр номера строки и забираю его с помощью метода GET. Существует такая функция, вот ее...

$GLOBALS странное поведение
$D = 34; $H = 23; $Y = $GLOBALS; $k = $Y; $A = &amp;$k &amp;$D &amp; $H; print_r($A); Данный код вернёт

38
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792
23.01.2023, 20:25  [ТС]
Студворк — интернет-сервис помощи студентам
А почему с цифрами все правильно передается?
0
419 / 311 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
23.01.2023, 20:29
Ну может закэшировал и перестал бороться с получением его. Смотрите что браузер запрашивает в отладчике
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792
23.01.2023, 20:29  [ТС]
Откуда, вообще, браузер знает, что в сессию идет урл, а не данные?
Или он во все сессии будет совать фавикон?
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
24.01.2023, 08:04
Что у вас используется в качестве "движка"? Судя по описанию у вас этот "индексный" файл является единой точкой входа, причем на которую (судя по favicon) заведена и та же иконка.

При этом для аякса другая точка входа.
0
Эксперт PHP
 Аватар для liris
5515 / 1198 / 164
Регистрация: 16.01.2023
Сообщений: 2,851
24.01.2023, 09:41
Лучший ответ Сообщение было отмечено vlad-55 как решение

Решение

Цитата Сообщение от vlad-55 Посмотреть сообщение
А почему с цифрами все правильно передается?
С цифрами вы не передаете запрос. Поэтому видите только цифры.
У вас нет проблемы с записью файла, у вас проблема именно с тем, что попадает лишняя информация в запрос (REQUEST_URI).

У вас настроено так, что при обращении к любому несуществующему файлу, запрос будет переадресован на index.php (единая точка входа, это нормально). В вашем случае "стреляет" обращение к несуществующему фавикону (добавьте его и ваша проблема решится). Но в будущем также, если у вас "побьется" ссылка на изображение или стиль или что-то еще, то есть появится ссылка на несуществующий ресурс - он также будет добавляться в ваш файл.
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792
24.01.2023, 12:49  [ТС]
Цитата Сообщение от liris Посмотреть сообщение
Но в будущем также, если у вас "побьется" ссылка на изображение или стиль или что-то еще, то есть появится ссылка на несуществующий ресурс - он также будет добавляться в ваш файл.
Какой тонкий и интересный эффект!
Вообще в этой ветке получилось супер для понимания этого непростого механизма. Перечитал все посты несколько раз.
Большое спасибо всем, кто дал мне такие ценные советы!

Добавлено через 1 час 1 минуту
Если разместить на индексной странице код
PHP
1
file_put_contents('4.txt', $_SERVER['REQUEST_URI'] . "\n", FILE_APPEND);
В текстовом файле получаем:
/wowa/
/test.css
/images/stydent03.jpg

Первая строка - адрес в адресной строке. Остальные - несуществующие файлы.

Несуществующие файлы могут всегда оказаться, поэтому так не годится. А что делать?
Как вытащить адрес?
0
419 / 311 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
24.01.2023, 12:52
https://www.php.net/manual/en/... exists.php
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
24.01.2023, 12:54
Лучше опишите цель. Зачем вам адрес индексной страницы в овтет на аякс запрос? такое ощущение, что вы чего то "городите" и усложняете
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792
24.01.2023, 13:05  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
Лучше опишите цель.
Я пытаюсь сделать CMS. Индексная страница является точкой входа. Нужно узнать адрес в адресной строке и из базы вытащить контент для этой страницы. Для определения адреса я предполагал использовать
PHP
1
$_SERVER['REQUEST_URI'
Вот пока топчусь на этом, поскольку, как оказалось, лезут и адреса других, несуществующих, элементов.

(Проблема с аякс отошла на второй план).
0
Эксперт PHP
 Аватар для liris
5515 / 1198 / 164
Регистрация: 16.01.2023
Сообщений: 2,851
24.01.2023, 13:09
Это вполне типовая задача, я бы рекомендовал посмотреть, как сделан роутинг в популярных фреймворках (типа Yii, Laravel, Symfony и т.п.).
Ну и статей довольно много на эту тему (гуглите по слову "роутинг").
1
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792
24.01.2023, 15:32  [ТС]
Я пересмотрел несколько статей по роутингу и запутался окончательно. Квалификация у меня невысокая - РНР в классическом виде (не ООП).

Я предполагал сделать CMS так:
- .htaccess организует точку входа через index.php;
- с помощью $_SERVER['REQUEST_URI'] я узнаю адрес страницы;
- по этому адресу запрашиваю контент в базе. Если в базе для этого адреса контент есть, то вывожу его в index.php. Если контента нет, то вывожу header("HTTP/1.1 404 Not Found");

Так оно и работает, но только если на сайте присутствуют все файлы, используемые на странице. А вот если на сайте нет какого-то файла, например картинки, то $_SERVER['REQUEST_URI'] помимо основного, выдает адреса недостающих файлов (один или несколько адресов). Например,
/wowa/
/test.css
/images/stydent03.jpg

Здесь /wowa/ - это адрес в строке браузера. А /test.css /images/stydent03.jpg - это файлы, которые запрашиваются на /wowa/, но которых нет на сайте.
И вот я не пойму, как мне в этом потоке "ухватить" первое значение (адрес страницы)? И как 404 выдать именно для него?
А потом 404 выдать поочередно для каждого из двух других. Ведь запросы браузер присылает мгновенно.
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
24.01.2023, 15:44
Так они не связаны
/wowa/
/test.css
/images/stydent03.jpg

Это 3 независимых запроса к index.php

Проблема в том, что какую-то проблему вы решили решать через сесссию, которая шарится между этими 3мя запросами. Может там сессия не нужна?

Добавлено через 1 минуту
Если все-же нужна, то как вариант писать туда после того, как определилось НЕ 404
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792
24.01.2023, 15:46  [ТС]
Да, вопрос с сессией отошел на задний план. Можно это не учитывать.

Цитата Сообщение от crautcher Посмотреть сообщение
Это 3 независимых запроса к index.php
Я теперь только понял это.

Как осуществить их обработку?
0
Эксперт PHP
 Аватар для liris
5515 / 1198 / 164
Регистрация: 16.01.2023
Сообщений: 2,851
24.01.2023, 15:53
Цитата Сообщение от vlad-55 Посмотреть сообщение
Квалификация у меня невысокая - РНР в классическом виде (не ООП).
Рекомендую это исправлять, современный РНР намного дружелюбнее, если использовать ООП. Будете реже стрелять себе в ногу. Правда конкретно в этом случае ООП бы вас не спас.

Цитата Сообщение от vlad-55 Посмотреть сообщение
Я предполагал сделать CMS так:
- .htaccess организует точку входа через index.php;
- с помощью $_SERVER['REQUEST_URI'] я узнаю адрес страницы;
- по этому адресу запрашиваю контент в базе. Если в базе для этого адреса контент есть, то вывожу его в index.php. Если контента нет, то вывожу header("HTTP/1.1 404 Not Found");
Я бы предложил выделить отдельную директорию под все ресурсы, например assets.
Тогда все запросы, начинающиеся на /assets, вы можете не обрабатывать скриптами вообще, а отдавать на исполнение веб-серверу. Есть там скрипт/стиль/картинка - отдаст, нет - вернет код ошибки.
Можно это правило описать в .htaccess.

По всем остальным запросам, мы уже будем отрабатывать в коде нашего роутера. При желании вы можете разбирать строку URI, доставать из нее аргументы, сверять с шаблоном и т.д. Как душа пожелает.
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792
24.01.2023, 18:08  [ТС]
Проблема предельно сконцентрировалась и упростилась.

На индексной странице разместили код:
file_put_contents('4.txt', $_SERVER['REQUEST_URI'] . "\n", FILE_APPEND);

И получаем в файле '4.txt:
/wowa/
/test.css
/images/stydent03.jpg

Я так понимаю, что /wowa/ - это адрес страницы, а /test.css и /images/stydent03.jpg – файлы, отсутствующие на сервере, но на них ссылается код страницы /wowa/. Эти элементы запрашивает браузер.

Осталось только понять, как отвечать браузеру на каждый их этих трех запросов.

По адресу /wowa/ запрашиваем контент в базе. Если в базе для этого адреса контент есть, то вывожу его в index.php. Если контента нет, то вывожу header("HTTP/1.1 404 Not Found");

По остальным адресам даже нет нужды делать запрос в базу. Но что-то нужно выдать на запрос браузера по этим элементам? Что конкретно выдать, какой ответ?

И главное – как отличить первый запрос, по которому нужен поиск в базе, от последующих? Как это делается на практике?
0
Эксперт PHP
 Аватар для liris
5515 / 1198 / 164
Регистрация: 16.01.2023
Сообщений: 2,851
24.01.2023, 18:11
Чуть выше вас познакомили с прекрасной функцией - https://www.php.net/manual/en/... exists.php.
Благодаря этой функции, вы можете узнать, есть такой файл или нет.

Но опять же, если вы воспользуетесь моим советом про размещение ресурсов в отдельном каталоге - вам не придется ломать голову, как отличить файл от страницы.
0
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792
24.01.2023, 18:31  [ТС]
Спасибо, но мне бы хотелось поискать ответ на тот вопрос, который сейчас сформулирован относительно кодов отклика
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
24.01.2023, 19:01
Цитата Сообщение от vlad-55 Посмотреть сообщение
И главное – как отличить первый запрос, по которому нужен поиск в базе, от последующих? Как это делается на практике?
На практике js, css, картинки и тп. не обрабатываются точкой входа. А так, ну можете, например, анализировать расширение. Если файл существует - выводить его (не забывая ставить правильные http заголовки. Если файла нет - отвечаете 404..


Вообще можете посмотреть на ютубе была серия видо что то типа "PSR-7 фреймворк на php"... (Там конечно есть моменты по которым есть разные мнения )... но возможно будет вам в тему.
1
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
24.01.2023, 19:27
Цитата Сообщение от vlad-55 Посмотреть сообщение
Как это делается на практике?
Трудно найти практический пример или заглянуть в букварь?

/wowa/ - handler1
/test.css - handler2
/images/stydent03.jpg - handler3

Добавлено через 5 минут
Кроме того, handler3, например, может все /images/(.*) (или /images/(.+)) "разруливать". В том числе и генерировать 404, если что-то внутри этой ветви не найдено.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2023, 19:27

Странное поведение программы
Странное поведение программы. Почему выводит эту, извините, ерунду в отображении после кнопки submit-а? Ребята, неужели я где-то забыл...

Странное поведение скрипта
Есть система оценок отделов компании. Оценки ставятся ежемесячно. Это обычная html-форма + php-обработчик. В этом обработчике есть...

Странное поведение скриптов
Здравствуйте, есть сайт olgamag24.ru, там форма отправки данных на e-mail, работающая через ajax, проблема в том, что форма на главной,...

Странное поведение session_id()
Вот такая конструкция иногда выдает варниг if (session_id()) { session_unset(); session_destroy(); ...

Странное поведение программы
Здравствуйте! Написал я программу (вот задание: &quot;Пользователь вводит email. Осуществить проверку на корректность (длина больше...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Опции темы

Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru