Я программирую почти 3 месяца, и я только что выучил php, и у меня возник вопрос: есть ли у php память?
Я имею в виду, если я создам новую переменную с помощью формы, когда я буду обновлять интернет-страницу, будет ли переменная еще существовать?
И да и нет).
Всемирная паутина в основном Реализация REST. Это означает, что сервер не остается активным, чтобы запомнить состояние между запросами (это без гражданства).
И это соответствует тому, как работает PHP. Скрипт PHP запускается ненадолго. Браузер запрашивает URL, PHP-скрипт запускается, генерирует вывод и завершается. Любые переменные, которые находятся в памяти, тогда забываются.
Поэтому, если вам нужно что-то вспомнить, вы должны отправить его обратно в браузер, а браузер должен отправить его вам снова для следующего запроса.
Вы можете сделать это несколькими способами.
Ссылки. Если вы выводите внутреннюю ссылку в PHP, вы можете добавить туда переменную (например, «имя»), чтобы ваш URL стал example.com/page.php?name=bob
, Это не очень удобно, так как в URL много мусора. Кроме того, URL-адреса с определенными значениями хранятся в истории браузера, поэтому пользователь может легко и случайно вернуться к URL-адресу, который имеет устаревшее значение для переменной.
Печенье. Хорошо известно, и гораздо проще и удобнее, чем переменные в ссылках. Вы можете установить cookie в PHP на сервере, чтобы отправить его вместе с ответом клиенту (браузеру). Браузер будет отправлять куки обратно с каждым новым запросом. Таким образом, вы можете хранить свою переменную там, и она будет сохранена. Вы можете установить cookie в PHP, используя setcookie
функция, и вы можете прочитать куки, используя $_COOKIE
.
Теперь куки имеют свой предел. Они не могут быть очень большими. Кроме того, переменная может содержать информацию, которую вы не хотите отправлять в браузер, потому что это секретная информация.
Чтобы решить эту проблему, вам нужно всего лишь отправить уникальный код в куки, с помощью которого вы можете определить, что следующий запрос принадлежит тому же сессия. Используя это идентификатор сессии, Вы можете найти ту переменную, которая была сохранена на сервере в одиночку.
Теперь вы можете реализовать эти сеансы самостоятельно, в основном, как я описал. Просто сгенерируйте уникальный идентификатор и сохраните всю необходимую вам информацию в файле или в базе данных, связанной с этим идентификатором. Идентификатор отправляется в браузер и обратно с использованием куки.
Но, к счастью, PHP может помочь вам в этом, и у него есть пара функций, которые позволяют вам начинать сеанс и запоминать определенные переменные до следующего запроса.
Начинается с функции session_start (). С помощью этой функции вы начинаете сеанс. PHP проверит, содержат ли куки идентификатор сессии и загрузит переменные предыдущего запроса в суперглобальный $_SESSION
, Если сеанса не было, генерируется новый уникальный идентификатор сеанса, который добавляется в файлы cookie, и $_SESSION
инициализируется в пустой массив.
Поэтому после этого вы можете использовать этот суперглобальный элемент для хранения значений в:
<?php
session_start();
if (!array_key_exists('start', $_SESSION))
$_SESSION['start'] = time(); // Save the start time of the session
echo 'This session started at ' . date($_SESSION['start'])
. '. And now it is ' . date(time()) . '.';
Если вы откроете вышеупомянутый скрипт через браузер и обновите страницу, вы увидите, что время между обновлениями меняется, а исходное время запуска сохраняется и отображается снова и снова. Итак, хотя PHP не помнит нормальные переменные, вы можете использовать сессий сохранить конкретные значения.
Подробное описание этих функций можно найти в PHP: сессии.
Вы можете сделать это через сессию
//set session
session_start();
$_SESSION["test"] = "data33";
затем,
//return session
session_start();
echo $_SESSION["test"];
или как сказал «mateop»: вы можете использовать куки для хранения данных в течение более длительного времени 🙂
Нет, каждое выполнение скрипта не зависит от предыдущего. Единственный способ хранить переменные между выполнениями — это использовать сессии, куки или какую-либо форму базы данных.
HTTP — это протокол без сохранения состояния, который означает, что после обновления страницы сервер даже не помнит, откуда поступил запрос. —
http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Чтобы справиться с этим, у нас есть сессия — http://php.net/manual/en/book.session.php (Эта ссылка содержит все детали)
Вы должны работать над этими основами, и ваш вопрос должен быть дан ответ. Для начала перейдите по ссылкам в этом посте.
Код ссылки будет: —
<?php
session_start();
if(isset($_SESSION['var']))
echo $_SESSION['var'];
else
$_SESSION["var"] = "hello";
?>