Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: как сохранять переменные.
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Подскажите, как сохранить переменную в "окружение", то есть как сделать, чтобы после завершения скрипта значение переменной сохранилось и его мог использовать другой скрипт. Например, чел вошел на главную страницу php, потом залогинился на другой странице php, его должно перенести тоже на главную php, но уже скрипт главной страницы должен понимать, что чел залогинен. Знаю, что кукисы можно использовать, но вроде же только в той ситуации, когда чел поставил галочку "запомнить", а как делать, если он ее не поставил? То есть пока чел не закроет все вкладки сайта, чтобы инфа о том, что он вошел, сохранялась.
Тоха
Отправлено: 26 Марта, 2010 - 00:42:27
Гость
Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010 Откуда: Орел, Россия
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
kaktusoed пишет:
Подскажите, как сохранить переменную в "окружение"
Чтобы устпновить переменную окружения вы можете использовать функцию http://www.php.su/functions/?putenv При этом установленное значения работате только для текущего сеанса исполнения PHP-скрипта и для его дочерних процессов
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Phantik
Отправлено: 26 Марта, 2010 - 12:26:14
Посетитель
Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009
Помог: 0 раз(а)
1) Кукисы (можно записывать не только когда пользователь галочку ставит)
2) Сессии
3) Запись в файл
4) Запись в базу
5) Передавать от скрипта к скрипту в URL строке (считывать через массив $_GET)
kaktusoed
Отправлено: 26 Марта, 2010 - 23:38:14
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
При наличии переменных $_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() сессия продолжается, даже если закрыть браузер. Как сделать, чтобы сессия обрывалась?
Заметьте, что в вызове функции отсутствует знак ссылки - он есть только в определении функции. Этого достаточно для корректной передачи аргументов по ссылке.
а у меня и если наоборот сделать в вызове функции знак ссылки, а в определении убрать, тоже пеерменная по ссылке передается, хотя не всегда, в общем, иногда по ссылке, а иногда по значению. непонятный глюк.
Цитата:
Если static-переменная unset() внутри функции, unset() разрушает эту переменную все ссылки на неё.
здесь я не понял, почему выводится 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().
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Цитата:
register_globalsboolean
Говорит, регистрировать ли EGPCS-переменные (Environment, GET, POST, Cookie, Server) как глобальные переменные.
А разве $_GET и тп - это не глобальнвые переменные? их же тоже видно из любой части. (хотя может это какие-нибудь суперглобальные переменные, я вроде читал где-то про такие. суперглобальные -это вроде такие, которые нельзя перекрыть в функциях, то есть нельзя использовать global ?)
Цитата:
сессия рвется при закрытии браузера (кроме firefox) или командой session_destroy()
почему кроме фаерфокса? у меня фаерфокс, но посмотрел, что при закрытии вкладки никакие заголовки не передаются, тогда как сервер узнает, что его вкладку закрыли? или это только фаерфокс не передает загловки при закрытии?
Тоха
Отправлено: 27 Марта, 2010 - 10:24:22
Гость
Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010 Откуда: Орел, Россия
Помог: 0 раз(а)
firefox хранит SESSID по несколько дней в отличии от остальных браузеров.
kaktusoed
Отправлено: 27 Марта, 2010 - 10:44:17
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Цитата:
Если глобализированная переменная unset() внутри функции, то разрушается только локальная переменная.Переменная в вызывающем окружении останется с тем же значением, что и до вызова unset().
Че то я не понял, как можно разрушать в этом случае локальную переменную, если ее не может существовать. потому что если существует глобальная переменная внутри функции, то ее же уже никак нельзя перекрыть локальной. А смысл тогда в том , что "Если глобализированная переменная unset() внутри функции, то разрушается только локальная переменная"?? (Добавление)
А как session_destroy(); прерывает сессию? (Добавление)
Цитата:
firefox хранит SESSID по несколько дней в отличии от остальных браузеров.
А если остальные браузеры удаляют куки сразу после закрытия окна, тогда как просиходит сохранение авторизации (когда нажимаешь"запомнить")?
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
kaktusoed пишет:
А если остальные браузеры удаляют куки сразу после закрытия окна, тогда как просиходит сохранение авторизации (когда нажимаешь"запомнить")?
Нет конечно же - просто если сессия основана на cookie то они могут иметь разные параметры - если в cookie указано время завершения то она будет держать авторизацию именно до этого времени - а если не указано то до закрытия браузера
Тоха пишет:
Firefox хранит SESSID по несколько дней в отличии от остальных браузеров
А Internet Excplorer поддерживает безопасную авторизацию через средства ActiveX в отличие от других браузеров Давайте не будет переходить здесь к вопросу о браузерах
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
jfr
Отправлено: 27 Марта, 2010 - 18:15:11
Посетитель
Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010 Откуда: Таджикистан, Худжанд
Помог: 0 раз(а)
[+]
kaktusoed пишет:
Подскажите, как сохранить переменную в "окружение", то есть как сделать, чтобы после завершения скрипта значение переменной сохранилось и его мог использовать другой скрипт.
Для этого вам необходимо использовать некоторые суперглобальные переменные, как $_POST, $_GET, $_COOKIE, $_SESSION, $_REQUEST, но не все одновременно сразу
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
jfr пишет:
Чтобы после завершения скрипта значение переменной сохранилось и его мог использовать другой скрипт
Здесь все-таки первостепенную роль играет COOKIE и SESSION ведь именно они отвечают за хранение информации между сессиями запуска PHP-скрипта - другие же переменные пользователь сам может изменить специально или случайно (А вот сессию пользователь изменить не может - сброить да а вот угадать номер другой рабочей сессии это практически невозможно
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
kaktusoed
Отправлено: 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() для этого юзать нельзя, так как она будет создавать новую сессию для каждого зашедшего.
kaktusoed
Отправлено: 29 Марта, 2010 - 02:36:36
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010
то это позволяет одновременно и не начинать новую сессию тем, кто еще не залогинен, и автоматически продолжать сессию тем, кто уже был ранее залогинен и отослал куки. Я вывел значение этой функции echo session_name() и оно равно " PHPSESSID ". Но если оно всегда равно " PHPSESSID " , то тогда можно даже не залогинившись посылать это значение где-нибудь в заголовках и сессия все-равно будет стартовать.
вылазит ошибка"Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in C:\w\out.php on line 2" , хотя сессия была открыта, но в другом скрипте? Хотя если session_destroy(); поместить в тот же скрипт, в котором сессия открывается, то ошибок не вылазит.
И почему session_destroy() не убивает куки в моем браузере?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.