За последние 24 часа нас посетили 17409 программистов и 1725 роботов. Сейчас ищут 1624 программиста ...

Опять про сессии - время жизни

Тема в разделе "PHP для новичков", создана пользователем akeelow, 19 июл 2013.

  1. akeelow

    akeelow Активный пользователь

    С нами с:
    10 апр 2012
    Сообщения:
    58
    Симпатии:
    0
    Всем привет! Использую пример:
    Код (PHP):
    1. <? 
    2. if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
    3. echo "refresh ".$_SESSION['counter']++." value. ";
    4. echo "<br><a href=".$_SERVER['PHP_SELF'].">refresh"; 
    5. ?>
    Все работает как задумано. Но после закрытия-открытия браузера счетчик сбрасывается (кроме хрома). И понятно почему, время жизни установлено "До закрытия браузера".

    Как изменить время жизни сессии, например, до месяца?
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    поставить куку
     
  3. akeelow

    akeelow Активный пользователь

    С нами с:
    10 апр 2012
    Сообщения:
    58
    Симпатии:
    0
    А можно пример?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
  5. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Увеличить время жизни можно:
    Код (Text):
    1. ini_set("session.gc_maxlifetime", $Lifetime);
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    над мне тоже переходить на сеткуки ибо заколебало день держаться сессия а потом офф

    Добавлено спустя 1 минуту 12 секунд:
    благодарю
     
  7. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Только это не панацея.
    По хорошему нужно юзать куки.

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

    Это так, вкратце.
     
  8. akeelow

    akeelow Активный пользователь

    С нами с:
    10 апр 2012
    Сообщения:
    58
    Симпатии:
    0
    Отлично, а можно эту команду в контексте моего кода, а то чего то не срабатывает?
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    неправильно тут советовали. время жизни сессии с точки зрения пользователя это время жизни сессионной куки. настраивается через http://php.ru/manual/function.session-set-cookie-params.html
    естественно должно вызываться ДО session_start()

    Добавлено спустя 1 минуту 50 секунд:
    session.gc_maxlifetime и еще некоторые параметры управляют garbage collection - подчисткой устаревших сессионных файлов.
     
  10. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Если сессионный файл будет удален, то уже смысла во времени жизни куки, в которой хранится session id нет.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    он не будет удален, если шаловливые ручки не будут что-то непотребное делать

    не надо теории разводить. пробуйте, получайте опыт.
     
  12. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Спасибо опыта достаточно :)
    Сам не пробовал, но в документации ясно сказано, что файл сессии хранится 1440 секунд бездействия и после удаляется.
    Сам я делаю сохранение авторизации совсем другим образом, который описал выше.
    Я считаю его более правильным. Т.к. если хранить файлы сессий годами для всех пользователей можно огрести большие тормоза, когда в директории их окажется сотни тысяч. Сессия она на то и сессия, чтобы создаваться на короткий отрезок времени.
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    на заборе тоже написано.
    только во первых "бездействия", т.е. при реальной, а не сферической-в-вакууме деятельности, если к файлу постоянно открывается доступ, то этот интервал не наступает. во вторых сборка мусора вызывается с некоторой вероятностью. то есть редко. конечно если буквально на месяц уйти, то вероятно файл будет удален. но что это б* за сессия длиной в месяц!

    теперь подумаем что дает ini_set("session.gc_maxlifetime", $Lifetime); оно влияет на сборку мусора в этом конкретном запросе. если на сайте (а может и на всем сервере, it depends) есть скрипты, которые НЕ вызывают эту штуку, но стартуют сессии, то у них lifetime будет по умолчанию и они твои файлики будут чистить. то есть нихрена не поменялось. править так уж в php.ini

    вот это верно
     
  14. akeelow

    akeelow Активный пользователь

    С нами с:
    10 апр 2012
    Сообщения:
    58
    Симпатии:
    0
    т.е. стандартный механизм авторизации не приспособлен для использования и всю логику нужно писать самому используя куки?
     
  15. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Это будет как минимум правильно.
     
  16. akeelow

    akeelow Активный пользователь

    С нами с:
    10 апр 2012
    Сообщения:
    58
    Симпатии:
    0
    Что-то маловато сообщений у вас, что бы знать что правильно, а что нет. Без обид :)
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да, наверное я лучше всех разбираюсь в похапе.

    сессии приспособлены, и всё делают правильно. Мало ли кто побежит к твоему компу после закрытия браузера, и полезет на политические форумы писать "Власть говно на трубе сидит" и "освободите навального" от вашего имени. Вот чтобы такого не было - придумано "до закрытия браузера". Очень удобно.

    и поэтому сессии приспособлены для авторизации, а не для того, чтобы "запомнить меня на этом компьютере": галочка, куки...
     
  18. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Да, судя по ним я даже до джуниора не дотягиваю )))
     
  19. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    доступ запрещен

    Добавлено спустя 1 минуту:
    в .htaccess мона ?
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    чей стандарт? ))) приведите примеры, пожалуйста.

    igordata, ты подменяешь понятия. кука-со-временем-жизни-до-закрытия-браузера !== сессионная кука.

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

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я вроде про то и сказал =)
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    тогда ладно )))
     
  23. akeelow

    akeelow Активный пользователь

    С нами с:
    10 апр 2012
    Сообщения:
    58
    Симпатии:
    0
    Говорил о стандартном функционале языка PHP
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в php нет стардартного механизма авторизации вообще
     
  25. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    А он тут и не нужен, хватает сессий и кук. Куки бес-пантовый вариант для хранения пользовательских данных (как не публичных так и некоторых публичных). Это может оказаться критично, если там "не перемудрить с какими-нибудь шифровками, обманом зрения". Пример возьмем вирус, дальше не подлежит объяснению, суть уясните сами...
    С одной стороны, не наши проблемы, а с другой стороны безопасность своих же пользователей.
    К тому-же, собственно сессия живет и уже не живет, а значит пользователь свалил и ему тут делать больше нечего, а значит нужно все подчистить. Зайдет "милости просим"...
    Хотя и тут, "Бида, Бида", можно же вирус написать и по отлову полей. А вот-это уже аргументик, так аргументик.

    Вы главное, проверяйте, то, что приходит от пользователей.