[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессия не умирает
Страницы: 1, 2, 3
Иван444
Всем привет! Может кто знает, сталкивался, подскажите пожалуйста

Такая ситуация, когда сессии нет я её создаю. Назовем сессию Вася.
Потом перехожу на другую страницу и переписываю эту сессию, на Петю.

Насколько мне известно то по умолчанию сессия должна исчезнуть через 24 минуты или по закрытию браузера. 24 минуты не обновляю страницу, закрываю и открываю браузер, ничего не помогает. По идеи там должен быть Вася, но там оказывается Петя.

Использую Денвер, пробовал разные браузеры, что за хрень
Иван444
Интересная эта все таки штука PHP
Итого
В общем т.к. на первый вопрос ответа никто не знает, задам второй, полегче)

Самые умные должны знать я думаю


В PHP есть @ которая прикрывает ошибки. Т.е. если вызвать переменную, которая не существует будет ошибка. А если использовать @ её не будет.

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

Вопрос: В каком случае будет быстрей работать сайт, когда используется @ или используя проверку if подскажите люди добрые кто что думает или где об этом можно почитать если кто знает.
inpost
1.Менял браузеры... это как? В любом случае тут либо прописано время жизни сессии, или, если дефолтный, то просто кривой код smile.gif Собственно сам перезаписываешь при открытии.
2. Не стоит париться с собаками. Они злы там, где ты прячешь ошибку, а не придумываешь способы скрыть ощибку. Твой if-> и есть аналогия этому. Не экономь на спичках.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Invis1ble
По первому вопросу: в хроме раньше была такая багофича - при перезапуске браузера куки с временем жизни "до закрытия браузера" не убивались. Как сейчас обстоит с этим дело - не знаю, проверяй.

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

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Иван444
Цитата (inpost @ 18.12.2013 - 04:20)
1.Менял браузеры... это как? В любом случае тут либо прописано время жизни сессии, или, если дефолтный, то просто кривой код smile.gif Собственно сам перезаписываешь при открытии.
2. Не стоит париться с собаками. Они злы там, где ты прячешь ошибку, а не придумываешь способы скрыть ощибку. Твой if-> и есть аналогия этому. Не экономь на спичках.

Добрый день УВАЖАЕМЫЙ учитель!)

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

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

По второму ответу, как Я понял, все же экономия на собаках есть)

Большое спасибо за помосчь мужчина)
Иван444
Цитата (Invis1ble @ 18.12.2013 - 04:21)
По первому вопросу: в хроме раньше была такая багофича - при перезапуске браузера куки с временем жизни "до закрытия браузера" не убивались. Как сейчас обстоит с этим дело - не знаю, проверяй.

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

Да я читал, поэтому и говорю, что пробовал в разных браузерах

Спасибо что ответил
Invis1ble
Разные браузеры - понятие относительное, например сейчас Опера перешла на движок вебкит, на котором основан и хром. Так что разные они могут быть только для тебя.
Смотри наличие куки в браузере, их время жизни и т.п. Далее смотри в конфиге сервера время жизни сессии. Короче, анализируй.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Aeq
Проверка с isset работает быстрее собаки. Банальным тестом проверяется легко. Дефолтный механизм сессий не дает гарантий что сессия убьется строго по времени, а всего лишь сообщает сборщику мусора что ее можно убить через это время
Valick
Цитата
Допустим у меня кривой код, но все равно после закрытия браузера сессия должна исчезать

может уже покажите уже?


_____________
Стимулятор ~yoomoney - 41001303250491
Иван444
Цитата (Valick @ 18.12.2013 - 09:15)
Цитата
Допустим у меня кривой код, но все равно после закрытия браузера сессия должна исчезать

может уже покажите уже?

Вот так создаю сессию если ее нет
if (!isset($_SESSION['zapros_tovara'])){
$_SESSION['zapros_tovara'] = T1;
}



Дальше перехожу на другую страницу и переписываю её

$_SESSION['zapros_tovara'] = T2;



Теперь в зависимости от сессии выполняю функцию

        if ($_SESSION['zapros_tovara'] == T1){
vt('vr_katalog');
}elseif ($_SESSION['zapros_tovara'] == T2){
vt('z_u_katalog');
}



И если у меня сессия равна $_SESSION['zapros_tovara'] = T2
то она не меняется и не умирает, почему не знаю.

Большое прибольшое всем спасибо за помощь!


Иван444
Цитата (Aeq @ 18.12.2013 - 08:54)
Проверка с isset работает быстрее собаки. Банальным тестом проверяется легко. Дефолтный механизм сессий не дает гарантий что сессия убьется строго по времени, а всего лишь сообщает сборщику мусора что ее можно убить через это время

Точно приточно isset будет быстрее работать? Там ведь вон какой длинный код получается

if(isset(условие)){
вывод
}



А тут просто

@вывод 
killer8080
Цитата (Иван444 @ 18.12.2013 - 13:23)
А тут просто

@вывод

длина кода не имеет прямой связи с быстродействием. Если переменной нет, срабатывает механизм генерации ошибок, который ест ресурсов больше чем isset(), то что ты скрыл их отображение ничего не меняет wink.gif



Спустя 51 секунда killer8080 написал(а):
Цитата (Иван444 @ 18.12.2013 - 13:19)
то она не меняется и не умирает, почему не знаю.

а с чего ей умирать? smile.gif
Иван444
Цитата (killer8080 @ 18.12.2013 - 15:48)
Цитата (Иван444 @ 18.12.2013 - 13:23)
А тут просто

@вывод

длина кода не имеет прямой связи с быстродействием. Если переменной нет, срабатывает механизм генерации ошибок, который ест ресурсов больше чем isset(), то что ты скрыл их отображение ничего не меняет wink.gif



Спустя 51 секунда killer8080 написал(а):
Цитата (Иван444 @ 18.12.2013 - 13:19)
то она не меняется и не умирает, почему не знаю.

а с чего ей умирать? smile.gif

Спасибо за ответ, буду теперь знать.


Ну умирать должна ведь она?) 24 минуты или закрытие браузера должно её убить нет?)


Я так думаю потому что мне так рассказывали)

killer8080
Цитата (Иван444 @ 18.12.2013 - 13:54)
Ну умирать должна ведь она?) 24 минуты или закрытие браузера должно её убить нет?)

Закрытие браузера может убить куки, но не сессию, сессия хранится на сервере, и когда её убить решает сервер, потеряв куки, браузер просто потеряет к ней доступ, но не убъёт smile.gif Вообще сколько времени хранить куки, решает сам браузер, expire date от сервера, носит рекомендательный характер, браузеры не обязаны беспрекословно ему подчинятся, хотя обычно они так и делают.
Почитай о том как работает сборщик мусора в механизме сессий, и все станет ясно. В настройках php есть параметры
session.gc_divisor
session.gc_maxlifetime
session.gc_probability

gc_divisor и gc_probability определяют периодичность запуска сборщика мусора.
если gc_probability = 100, а gc_divisor = 1, то каждый сотый вызов session_start, будет вызывать garbage collector.
Это значит что, чтобы убился твой файл сессии, нужно в интервал времени gc_maxlifetime произошло 100 обращений к запуску session_start() от другого браузера, из под другой сессии. Только в этом случае твоя сессия умрет по времени. В продакшине, при большой посещаемости, с этим проблем нет,а в денвере, кто кроме тебя обращается к серверу? Никто. Вот и живет твоя сессия не определенное время, намного больше чем тебе хотелось smile.gif
shmali
Цитата (Иван444 @ 17.12.2013 - 17:24)
Всем привет! Может кто знает, сталкивался, подскажите пожалуйста

Такая ситуация, когда сессии нет я её создаю. Назовем сессию Вася.
Потом перехожу на другую страницу и переписываю эту сессию, на Петю.

Насколько мне известно то по умолчанию сессия должна исчезнуть через 24 минуты или по закрытию браузера. 24 минуты не обновляю страницу, закрываю и открываю браузер, ничего не помогает. По идеи там должен быть Вася, но там оказывается Петя.

1. Ты создал сессию
2. Ты ее переписал
3 Ты ждешь что сессия которую ты переписал , осталась жить

Если ты переписал сессию , ее больше нету , теперь там вместо Васи лежит Петя , все . Васи там уже не будет никогда.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.