Как сохранить значение переменной через $_SESSION
Добра всем! Помогите нубу сделать супер красивую авторизацию! Суть: делаю форму авторизации по SMS без переходов, первый этап получить телефон клиента, обычная форма. Второй этап сверить временный код с введенным на этой же странице. Суть в том что столкнулся с проблемой сохранения переменной после перезагрузки: Вот мой коды: Первоначальный обработчик (мой роутинг): всегда запускает session_start(); на любой открывающейся странице: Далее на странице авторизациии идет такой код:
if (isset($_POST['user_tel']))
Однако после перезагрузки страницы $_SESSION[‘user_tel’] становится пустым. Прошу указать что я делаю не так. Спасибо! Спасибо за помощь! Весь код: Это роутинг, он ищет и запускает функцию Start у конкретных модулей:
public static function Start() < session_start(); echo 'Старт сесии'; self::access(); self::get_db(); self::$url = $_SERVER['REQUEST_URI']; $urlparam = explode('/', self::$url); $class = $urlparam[1]; $rout = json_decode(file_get_contents(__DIR__ . '/json/route.json'), true); $pos = []; $modname = []; foreach ($rout as $url =>$value) < if ($url === "/" . $class) < $template = $value['template']; $temp = file_get_contents(__DIR__ . "/../views/.html"); foreach ($value['pos'] as $key => $module) < $mod = "\\module\\" . $module . "::Start"; $pos[] = ">"; $modname[] = call_user_func($mod); > break; > > echo str_replace($pos, $modname, $temp); >
А это непосредственно обработчик формы авторизации:
public static function Start(): string < if (isset($_SESSION['id'])) < //header('Location: /home'); // сделать кнопку выход >if ((isset($_POST['user_email']) and isset($_POST['user_password']))) < if (self::chek($_POST['user_email'], $_POST['user_password'])) < header('Location: /home'); >else < $temp = file_get_contents(__DIR__ . "/login.html", true); $temp.= 'Логин / Пароль не правильный'; return $temp; >> if (isset($_POST['user_tel'])) < $_SESSION['user_tel'] = $_POST['user_tel']; echo $_SESSION['user_tel']; >$temp = file_get_contents(__DIR__ . "/login.html", true); return $temp; >
Как сохранить значение переменной
Допустим сложил я две переменные 2 + 3 и получил результат в переменную $s = 5, потом я ходил по сайту минут 15 и мне понадобилась снова число 5 из пременной $s а оно будет уже утеряно я так понимаю? Число 5 в переменной будет потеряно?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
register_globals=off как значение переменной теперь сохранить в сессию?
Страница выдала ошибку Warning: Unknown: Your script possibly relies on a session side-effect.
Сохранить значение в переменной и получить его в другом php файле
Добрый день, я новичек в php, но жизнь заставила им пользоваться. )) Написал (на основе готовых.
Как сделать чтобы название переменной, было значение другой переменной?
Я хочу сделать следующее: пример: $test1 = "aver"; $test2 = "12345"; В конечном итоге, я хочу.
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
NIKOLAYY, переменные и их значения доступны исключительно при обработке запроса. Примерно такая схема:
1) Запрос клиента ответ сервера (на этом работа PHP закончена).
2) 15 минут пользователь читает присланную сервером страницу.
Т.е. из этого следует что на первом этапе переменные (вместе со значениями) теряются навсегда. Вам следует использовать Cookies, ведь в таком случае эту переменную можно получить не только на другой PHP-странице, но и даже через JavaScript (на клиенте), к тому же можно указать срок жизни (до закрытия браузера или до определенного времени).
Как сохранить переменную в php
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Подскажите, как сохранить переменную в «окружение», то есть как сделать, чтобы после завершения скрипта значение переменной сохранилось и его мог использовать другой скрипт. Например, чел вошел на главную страницу php, потом залогинился на другой странице php, его должно перенести тоже на главную php, но уже скрипт главной страницы должен понимать, что чел залогинен. Знаю, что кукисы можно использовать, но вроде же только в той ситуации, когда чел поставил галочку «запомнить», а как делать, если он ее не поставил? То есть пока чел не закроет все вкладки сайта, чтобы инфа о том, что он вошел, сохранялась.
Отправлено: 26 Марта, 2010 — 00:42:27
Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010
Откуда: Орел, Россия
Помог: 0 раз(а)
Учитесь работать с сессиями
Отправлено: 26 Марта, 2010 — 11:48:57
Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010
Откуда: Таджикистан, Худжанд
Помог: 0 раз(а)
$_SESSION [ ‘test’ ] = ‘Hello world!’ ;
$test = $_SESSION [ ‘test’ ] ;
echo $test ; //вывод: Hello world!
сначало запусти первый скрипт, потом второй
(Отредактировано автором: 26 Марта, 2010 — 11:51:15)
Отправлено: 26 Марта, 2010 — 11:52:15
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
kaktusoed пишет:
Подскажите, как сохранить переменную в «окружение»
Чтобы устпновить переменную окружения вы можете использовать функцию http://www.php.su/functions/?putenv При этом установленное значения работате только для текущего сеанса исполнения PHP-скрипта и для его дочерних процессов
——
Сделать можно все что угодно — нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства — http://ihost[dot]oks71[dot]ru/
Отправлено: 26 Марта, 2010 — 12:26:14
Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009
Помог: 0 раз(а)
1) Кукисы (можно записывать не только когда пользователь галочку ставит)
2) Сессии
3) Запись в файл
4) Запись в базу
5) Передавать от скрипта к скрипту в URL строке (считывать через массив $_GET)
Отправлено: 26 Марта, 2010 — 23:38:14
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Кто-нибудь может это объяснить мне:
Цитата:
При наличии переменных $_SESSION или $HTTP_SESSION_VARS нет необходимости использовать функции session_register()/session_unregister()/session_is_registered().
Цитата:
Если вы включили register_globals, должна использоваться session_unregister(), поскольку переменные сессии регистрируются как глобальные переменные, когда данные сессии десериализуются.
здесь вообще противоречащая инфа. у меня кстати пишет «Function session_unregister() is deprecated», хотя register_globals включен. кстати, в каком тут смысле «глобальные переменные» — это любые переменые вне функций, или только специальные типа $_GET и тп?
Цитата:
Если register_globals включена, то все глобальные переменные могут быть зарегистрированы как переменные сессии, а переменные сессии будут восстанавливаться в соответствующие глобальные переменные
это ввобще как понять?
Цитата:
Поскольку PHP обязан знать, какие глобальные переменные зарегистрированы как переменные сессии
Цитата:
Если track_vars и register_globals включены, то вхождения глобальных переменных и $HTTP_SESSION_VARS/$_SESSION будут ссылаться на то же самое значение для уже зарегистрированных переменных.
это тоже как понять?
Цитата:
По умолчанию в последних версиях PHP включены обе опции (куки и GET). Как PHP поступает в этом случае? Кука выставляется всегда. А ссылки автодополняются только если РНР не обнаружил куку с идентификатором сессии. Когда пользователь в првый раз за этот сеанс заходит на сайт, ему ставится кука, и дополняются ссылки. При следующем запросе, если куки поддерживаются, PHP видит куку и перестает дополнять ссылки. Если куки не работают, то PHP продолжает исправно добавлять ид к ссылкам, и сессия не теряется.
Пользователи, у которых работают куки, увидят длинную ссылку с ид только один раз.
у меня с 1го захода не было никакого дополнительного GET (ссылок) в запросе.
И вообще, есть же на сайтах опция «запомнить», то есть я так понимаю, если юзер закрыл браузер, то сессия прерывается, а спомощью session_start() сессия продолжается, даже если закрыть браузер. Как сделать, чтобы сессия обрывалась?
function foo ( & $var )
// $a здесь равно 6
Цитата:
Заметьте, что в вызове функции отсутствует знак ссылки — он есть только в определении функции. Этого достаточно для корректной передачи аргументов по ссылке.
а у меня и если наоборот сделать в вызове функции знак ссылки, а в определении убрать, тоже пеерменная по ссылке передается, хотя не всегда, в общем, иногда по ссылке, а иногда по значению. непонятный глюк.
Цитата:
Если static-переменная unset() внутри функции, unset() разрушает эту переменную все ссылки на неё.
function foo ( ) {
Цитата:
здесь я не понял, почему выводится 1,2,3 если переменная уничтожается, то должна каждый раз заново инициироваться, то есть должно быть 1,1,1.
Отправлено: 27 Марта, 2010 — 00:12:59
Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010
Откуда: Орел, Россия
Помог: 0 раз(а)
Глобальные переменные — это переменные, которые видны из любого места в скрипте. Будь то функция или частный метод класса. Получить и изменить глобальную переменную можно отовсюду.
register_globals() «приравнивает» переменные $_GET[‘foo’] и $foo
То есть при включенном r_g мы в каждом скрипте получаем передаваемые имена формы как строковые переменные.
сессия рвется при закрытии браузера (кроме firefox) или командой session_destroy()
Цитата:
Если глобализированная переменная unset() внутри функции, то разрушается только локальная переменная.Переменная в вызывающем окружении останется с тем же значением, что и до вызова unset().
(Отредактировано автором: 27 Марта, 2010 — 00:14:13)
Отправлено: 27 Марта, 2010 — 09:57:12
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Цитата:
Говорит, регистрировать ли EGPCS-переменные (Environment, GET, POST, Cookie, Server) как глобальные переменные.
А разве $_GET и тп — это не глобальнвые переменные? их же тоже видно из любой части. (хотя может это какие-нибудь суперглобальные переменные, я вроде читал где-то про такие. суперглобальные -это вроде такие, которые нельзя перекрыть в функциях, то есть нельзя использовать global ?)
Цитата:
сессия рвется при закрытии браузера (кроме firefox) или командой session_destroy()
почему кроме фаерфокса? у меня фаерфокс, но посмотрел, что при закрытии вкладки никакие заголовки не передаются, тогда как сервер узнает, что его вкладку закрыли? или это только фаерфокс не передает загловки при закрытии?
Отправлено: 27 Марта, 2010 — 10:24:22
Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010
Откуда: Орел, Россия
Помог: 0 раз(а)
firefox хранит SESSID по несколько дней в отличии от остальных браузеров.
Отправлено: 27 Марта, 2010 — 10:44:17
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Цитата:
Если глобализированная переменная unset() внутри функции, то разрушается только локальная переменная.Переменная в вызывающем окружении останется с тем же значением, что и до вызова unset().
Че то я не понял, как можно разрушать в этом случае локальную переменную, если ее не может существовать. потому что если существует глобальная переменная внутри функции, то ее же уже никак нельзя перекрыть локальной. А смысл тогда в том , что «Если глобализированная переменная unset() внутри функции, то разрушается только локальная переменная»??
(Добавление)
А как session_destroy(); прерывает сессию?
(Добавление)
Цитата:
firefox хранит SESSID по несколько дней в отличии от остальных браузеров.
А если остальные браузеры удаляют куки сразу после закрытия окна, тогда как просиходит сохранение авторизации (когда нажимаешь»запомнить»)?
(Отредактировано автором: 27 Марта, 2010 — 10:45:12)
Отправлено: 27 Марта, 2010 — 12:50:42
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
kaktusoed пишет:
А если остальные браузеры удаляют куки сразу после закрытия окна, тогда как просиходит сохранение авторизации (когда нажимаешь»запомнить»)?
Нет конечно же — просто если сессия основана на cookie то они могут иметь разные параметры — если в cookie указано время завершения то она будет держать авторизацию именно до этого времени — а если не указано то до закрытия браузера
Тоха пишет:
Firefox хранит SESSID по несколько дней в отличии от остальных браузеров
А Internet Excplorer поддерживает безопасную авторизацию через средства ActiveX в отличие от других браузеров Давайте не будет переходить здесь к вопросу о браузерах
——
Сделать можно все что угодно — нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства — http://ihost[dot]oks71[dot]ru/
Отправлено: 27 Марта, 2010 — 18:15:11
Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010
Откуда: Таджикистан, Худжанд
Помог: 0 раз(а)
kaktusoed пишет:
Подскажите, как сохранить переменную в «окружение», то есть как сделать, чтобы после завершения скрипта значение переменной сохранилось и его мог использовать другой скрипт.
Для этого вам необходимо использовать некоторые суперглобальные переменные, как $_POST, $_GET, $_COOKIE, $_SESSION, $_REQUEST, но не все одновременно сразу
(Отредактировано автором: 27 Марта, 2010 — 18:17:05)
Отправлено: 28 Марта, 2010 — 13:57:06
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
jfr пишет:
Чтобы после завершения скрипта значение переменной сохранилось и его мог использовать другой скрипт
Здесь все-таки первостепенную роль играет COOKIE и SESSION ведь именно они отвечают за хранение информации между сессиями запуска PHP-скрипта — другие же переменные пользователь сам может изменить специально или случайно (А вот сессию пользователь изменить не может — сброить да а вот угадать номер другой рабочей сессии это практически невозможно
——
Сделать можно все что угодно — нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства — http://ihost[dot]oks71[dot]ru/
Отправлено: 28 Марта, 2010 — 23:05:26
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
Помог: 0 раз(а)
А вот интересно, если сервер высоконагруженный и работа с сессиями не огранизована , и на сервер каждую секунду отправляют по несколько форм ($_POST[‘name’) разные юзеры, и сервер не успавает выполнить скрипт для одного пользователя, как ему уже другой пользователь отправил другой POST , то сервер будет каждый раз при отправке ему нового POSTa перезаписывать старый POST и по-этому будут возникать ошибки обработки POSTа для разных юзеров?? потому что сессии-то не организованы, значит сервер не может различить разных юзеров, и не отличит, кто послал какой POST и будет все посланные POSTЫ записывать (перезаписывать) в одну переменную $_POST?
Или даже если сессии не организованы, то сервер определяет айпишник и для каждого айпишника создает свою отдельную переменную $_POST ??
(Добавление)
И как все-таки сделать, чтобы если установил галочку «запомнить», то сервер тебя надолго запоминал, а если не установил, то сбрасывал твою сессию после закрытия браузера??
(Добавление)
и как сделать так, чтобы если юзер забыл ввести логин в форме и отправил ее, то после перезагрузки страницы ему бы вылезало напоминание ,что он не ввел логин. Это ж получается, что нужно сохранить в переменную, что юзер уже пытался авторизироваться, чтобы эту переменную мог прочитать заново запущенный скрипт, то есть нужно создать сессию? Но тогда получется, что для кажого неавторизированного юзера, пытающегося авторизироваться, нужно создать сессию, а я прочитал, что сессии не надо создавать для всех подряд, так как это создает нагрузку.
И еще, если после того, как создастся сессия в скрипте 1.php, обязон нужно чтобы юзер через какое-то время прошел в скрипт 2.php , в котором сессия должна оборваться, то как его заставить это сделать? то есть чтобы не было такого, что он закрыл браузер, а сессия для него осталась и нагружала сервер.
(Добавление)
И если 2 раза подряд вызвать session_start() , то только одна сессия создастся для данного айпишника? session_start() проверяет , создана уже для этого айпишника сессия и если создана, то заново не создает?
(Добавление)
А как сделать, чтобы при заходе на главную страницу(или вообще на любую страницу) новые сессии не открывались, но при этом продолжались сессии для юзеров, ддля которых уже были ранее созданы сессии и сохранены в куки? session_start() для этого юзать нельзя, так как она будет создавать новую сессию для каждого зашедшего.
#3 – Переменные и типы данных в PHP

Переменные присутствуют во всех языках программирования. PHP не является исключением. В ходе урока мы научимся создавать переменные и работать с константами. Также мы изучим типы данных для переменных.
Видеоурок
Переменные невероятно важны, так как позволяют хранить информацию и использовать её в дальнейшем. Вначале может быть не совсем понятно зачем вообще что-то записывать в переменную, если можно просто оперировать значениями без них. Понимание переменных придет немного позже, когда мы начнем создавать более сложные программы и нам потребуется хранить информацию в каком-либо месте.
Типы переменных в языке PHP не объявляются очевидно, тем не менее они присутствуют. Интерпретатор понимает что записывается в переменную и на основании этого добавляет тип к этой переменной.
В ходе программы мы можем перезаписывать значение переменной, при этом мы можем указывать новый тип переменной.
К примеру, изначально был записан тип float (число с точкой), но потом можно записать другой тип данных:
$first_num = 23.2; // Тип данных float $first_num = "1"; // Тип данных string
Ниже приводим несколько существующих типов данных в языке PHP:
- $some = 1 Integer — целые числа;
- $some = 1.12 Float — числа с плавающей точкой;
- $some = «Привет» String — строки;
- $some = true Boolean — принимают только true или же false.
Создание констант
В PHP помимо создания простых переменных можно создавать константы.
Константы – это значения, что нельзя изменить входе выполнения программы. Создав один раз константу и присвоив ей значение, мы не сможем больше изменить это значение, так как будет выдаваться ошибка.
Чтобы создать константу необходимо использовать метод define() :
define("SOME", "Значение"); echo SOME; // Вывод константы
Первым параметром указывается название константы, а вторым параметром — значение. Принято записывать названия констант в верхнем регистре, хотя при написании в нижнем регистре ошибок выдано не будет.
Вы можете проверить существует ли константа использовав метод defined() .
Весь код будет доступен после подписки на проект!
