Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,792

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

23.01.2023, 17:47. Показов 1433. Ответов 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 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
24.01.2023, 08:04
Что у вас используется в качестве "движка"? Судя по описанию у вас этот "индексный" файл является единой точкой входа, причем на которую (судя по favicon) заведена и та же иконка.

При этом для аякса другая точка входа.
0
Эксперт PHP
 Аватар для liris
5513 / 1196 / 164
Регистрация: 16.01.2023
Сообщений: 2,847
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 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 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
5513 / 1196 / 164
Регистрация: 16.01.2023
Сообщений: 2,847
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
5513 / 1196 / 164
Регистрация: 16.01.2023
Сообщений: 2,847
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
5513 / 1196 / 164
Регистрация: 16.01.2023
Сообщений: 2,847
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 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru