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 :: как сохранять переменные.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
kaktusoed
Отправлено: 26 Марта, 2010 - 00:36:14
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Подскажите, как сохранить переменную в "окружение", то есть как сделать, чтобы после завершения скрипта значение переменной сохранилось и его мог использовать другой скрипт. Например, чел вошел на главную страницу php, потом залогинился на другой странице php, его должно перенести тоже на главную php, но уже скрипт главной страницы должен понимать, что чел залогинен. Знаю, что кукисы можно использовать, но вроде же только в той ситуации, когда чел поставил галочку "запомнить", а как делать, если он ее не поставил? То есть пока чел не закроет все вкладки сайта, чтобы инфа о том, что он вошел, сохранялась.
 
 Top
Тоха
Отправлено: 26 Марта, 2010 - 00:42:27
Post Id



Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010  
Откуда: Орел, Россия


Помог: 0 раз(а)




Учитесь работать с сессиями
 
 Top
jfr
Отправлено: 26 Марта, 2010 - 11:48:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


----1.php-----
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $_SESSION['test']='Hello world!';
  3. ?>



----2.php------
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $test=$_SESSION['test'];
  3. echo $test; //вывод: Hello world!
  4. ?>


сначало запусти первый скрипт, потом второй

(Отредактировано автором: 26 Марта, 2010 - 11:51:15)

 
 Top
JustUserR
Отправлено: 26 Марта, 2010 - 11:52:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




kaktusoed пишет:
Подскажите, как сохранить переменную в "окружение"
Чтобы устпновить переменную окружения вы можете использовать функцию http://www.php.su/functions/?putenv При этом установленное значения работате только для текущего сеанса исполнения PHP-скрипта и для его дочерних процессов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Phantik
Отправлено: 26 Марта, 2010 - 12:26:14
Post Id


Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




1) Кукисы (можно записывать не только когда пользователь галочку ставит)
2) Сессии
3) Запись в файл
4) Запись в базу
5) Передавать от скрипта к скрипту в URL строке (считывать через массив $_GET)
 
 Top
kaktusoed
Отправлено: 26 Марта, 2010 - 23:38:14
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Прочитал вот тут:
http://php.su/functions/?cat=session

Кто-нибудь может это объяснить мне:

Цитата:
При наличии переменных $_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() сессия продолжается, даже если закрыть браузер. Как сделать, чтобы сессия обрывалась?

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function foo(&$var)
  3. {
  4.      $var++;
  5. }
  6.  
  7. $a=5;
  8. foo($a);
  9. // $a здесь равно 6
  10. ?>
  11.  

Цитата:

Заметьте, что в вызове функции отсутствует знак ссылки - он есть только в определении функции. Этого достаточно для корректной передачи аргументов по ссылке.

а у меня и если наоборот сделать в вызове функции знак ссылки, а в определении убрать, тоже пеерменная по ссылке передается, хотя не всегда, в общем, иногда по ссылке, а иногда по значению. непонятный глюк.

Цитата:
Если static-переменная unset() внутри функции, unset() разрушает эту переменную все ссылки на неё.

PHP:
скопировать код в буфер обмена
  1.  
  2. function foo() {
  3. static $a;
  4. $a++;
  5. echo "$a\n";
  6. unset($a);
  7. }
  8.  
  9. foo();
  10. foo();
  11. foo();

Цитата:

Пример выведет:

1
2
3

здесь я не понял, почему выводится 1,2,3 если переменная уничтожается, то должна каждый раз заново инициироваться, то есть должно быть 1,1,1.
 
 Top
Тоха
Отправлено: 27 Марта, 2010 - 00:12:59
Post Id



Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010  
Откуда: Орел, Россия


Помог: 0 раз(а)




Глобальные переменные - это переменные, которые видны из любого места в скрипте. Будь то функция или частный метод класса. Получить и изменить глобальную переменную можно отовсюду.

register_globals() "приравнивает" переменные $_GET['foo'] и $foo
То есть при включенном r_g мы в каждом скрипте получаем передаваемые имена формы как строковые переменные.

сессия рвется при закрытии браузера (кроме firefox) или командой session_destroy()

ну и наконец
Цитата:
Если глобализированная переменная unset() внутри функции, то разрушается только локальная переменная.Переменная в вызывающем окружении останется с тем же значением, что и до вызова unset().

(Отредактировано автором: 27 Марта, 2010 - 00:14:13)

 
 Top
kaktusoed
Отправлено: 27 Марта, 2010 - 09:57:12
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Цитата:
register_globalsboolean

Говорит, регистрировать ли EGPCS-переменные (Environment, GET, POST, Cookie, Server) как глобальные переменные.

А разве $_GET и тп - это не глобальнвые переменные? их же тоже видно из любой части. (хотя может это какие-нибудь суперглобальные переменные, я вроде читал где-то про такие. суперглобальные -это вроде такие, которые нельзя перекрыть в функциях, то есть нельзя использовать global ?)

Цитата:
сессия рвется при закрытии браузера (кроме firefox) или командой session_destroy()
почему кроме фаерфокса? у меня фаерфокс, но посмотрел, что при закрытии вкладки никакие заголовки не передаются, тогда как сервер узнает, что его вкладку закрыли? или это только фаерфокс не передает загловки при закрытии?
 
 Top
Тоха
Отправлено: 27 Марта, 2010 - 10:24:22
Post Id



Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010  
Откуда: Орел, Россия


Помог: 0 раз(а)




firefox хранит SESSID по несколько дней в отличии от остальных браузеров.
 
 Top
kaktusoed
Отправлено: 27 Марта, 2010 - 10:44:17
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Цитата:
Если глобализированная переменная unset() внутри функции, то разрушается только локальная переменная.Переменная в вызывающем окружении останется с тем же значением, что и до вызова unset().

Че то я не понял, как можно разрушать в этом случае локальную переменную, если ее не может существовать. потому что если существует глобальная переменная внутри функции, то ее же уже никак нельзя перекрыть локальной. А смысл тогда в том , что "Если глобализированная переменная unset() внутри функции, то разрушается только локальная переменная"??
(Добавление)
А как session_destroy(); прерывает сессию?
(Добавление)
Цитата:
firefox хранит SESSID по несколько дней в отличии от остальных браузеров.

А если остальные браузеры удаляют куки сразу после закрытия окна, тогда как просиходит сохранение авторизации (когда нажимаешь"запомнить")?

(Отредактировано автором: 27 Марта, 2010 - 10:45:12)

 
 Top
JustUserR
Отправлено: 27 Марта, 2010 - 12:50:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




kaktusoed пишет:
А если остальные браузеры удаляют куки сразу после закрытия окна, тогда как просиходит сохранение авторизации (когда нажимаешь"запомнить")?
Нет конечно же - просто если сессия основана на cookie то они могут иметь разные параметры - если в cookie указано время завершения то она будет держать авторизацию именно до этого времени - а если не указано то до закрытия браузера
Тоха пишет:
Firefox хранит SESSID по несколько дней в отличии от остальных браузеров
А Internet Excplorer поддерживает безопасную авторизацию через средства ActiveX в отличие от других браузеров Давайте не будет переходить здесь к вопросу о браузерах Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
jfr
Отправлено: 27 Марта, 2010 - 18:15:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


kaktusoed пишет:
Подскажите, как сохранить переменную в "окружение", то есть как сделать, чтобы после завершения скрипта значение переменной сохранилось и его мог использовать другой скрипт.

Для этого вам необходимо использовать некоторые суперглобальные переменные, как $_POST, $_GET, $_COOKIE, $_SESSION, $_REQUEST, но не все одновременно сразу Радость

(Отредактировано автором: 27 Марта, 2010 - 18:17:05)

 
 Top
JustUserR
Отправлено: 28 Марта, 2010 - 13:57:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




jfr пишет:
Чтобы после завершения скрипта значение переменной сохранилось и его мог использовать другой скрипт
Здесь все-таки первостепенную роль играет COOKIE и SESSION ведь именно они отвечают за хранение информации между сессиями запуска PHP-скрипта - другие же переменные пользователь сам может изменить специально или случайно (А вот сессию пользователь изменить не может - сброить да а вот угадать номер другой рабочей сессии это практически невозможно Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
kaktusoed
Отправлено: 28 Марта, 2010 - 23:05:26
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




А вот интересно, если сервер высоконагруженный и работа с сессиями не огранизована , и на сервер каждую секунду отправляют по несколько форм ($_POST['name') разные юзеры, и сервер не успавает выполнить скрипт для одного пользователя, как ему уже другой пользователь отправил другой POST , то сервер будет каждый раз при отправке ему нового POSTa перезаписывать старый POST и по-этому будут возникать ошибки обработки POSTа для разных юзеров?? потому что сессии-то не организованы, значит сервер не может различить разных юзеров, и не отличит, кто послал какой POST и будет все посланные POSTЫ записывать (перезаписывать) в одну переменную $_POST?
Или даже если сессии не организованы, то сервер определяет айпишник и для каждого айпишника создает свою отдельную переменную $_POST ??
(Добавление)
И как все-таки сделать, чтобы если установил галочку "запомнить", то сервер тебя надолго запоминал, а если не установил, то сбрасывал твою сессию после закрытия браузера??
(Добавление)
и как сделать так, чтобы если юзер забыл ввести логин в форме и отправил ее, то после перезагрузки страницы ему бы вылезало напоминание ,что он не ввел логин. Это ж получается, что нужно сохранить в переменную, что юзер уже пытался авторизироваться, чтобы эту переменную мог прочитать заново запущенный скрипт, то есть нужно создать сессию? Но тогда получется, что для кажого неавторизированного юзера, пытающегося авторизироваться, нужно создать сессию, а я прочитал, что сессии не надо создавать для всех подряд, так как это создает нагрузку.
И еще, если после того, как создастся сессия в скрипте 1.php, обязон нужно чтобы юзер через какое-то время прошел в скрипт 2.php , в котором сессия должна оборваться, то как его заставить это сделать? то есть чтобы не было такого, что он закрыл браузер, а сессия для него осталась и нагружала сервер.
(Добавление)
И если 2 раза подряд вызвать session_start() , то только одна сессия создастся для данного айпишника? session_start() проверяет , создана уже для этого айпишника сессия и если создана, то заново не создает?
(Добавление)
А как сделать, чтобы при заходе на главную страницу(или вообще на любую страницу) новые сессии не открывались, но при этом продолжались сессии для юзеров, ддля которых уже были ранее созданы сессии и сохранены в куки? session_start() для этого юзать нельзя, так как она будет создавать новую сессию для каждого зашедшего.
 
 Top
kaktusoed
Отправлено: 29 Марта, 2010 - 02:36:36
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




А кто-нибудь может объяснить смысл вот этого:

isset($_REQUEST[session_name()])

я прочитал, что если сделать так
PHP:
скопировать код в буфер обмена
  1.   if (isset($_REQUEST[session_name()]))
  2.       {
  3.       session_start();
  4.       }

то это позволяет одновременно и не начинать новую сессию тем, кто еще не залогинен, и автоматически продолжать сессию тем, кто уже был ранее залогинен и отослал куки. Я вывел значение этой функции 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() не убивает куки в моем браузере?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB