Сколько времени моя сессия продлится?

Я думаю, что можно сбрить несколько вызовов метода, если Вы делаете это как это:

>>> from datetime import datetime
>>> datetime.now(pytz.timezone("Australia/Melbourne")) \
            .replace(hour=0, minute=0, second=0, microsecond=0) \
            .astimezone(pytz.utc)

BUT†¦ существует большая проблема, чем эстетика в Вашем коде: это даст неправильный результат в день переключателя к или с Летнего времени.

причина этого состоит в том, что ни конструкторы даты и времени, ни replace() не принимают изменения DST во внимание.

, Например:

>>> now = datetime(2012, 4, 1, 5, 0, 0, 0, tzinfo=pytz.timezone("Australia/Melbourne"))
>>> print now
2012-04-01 05:00:00+10:00
>>> print now.replace(hour=0)
2012-04-01 00:00:00+10:00 # wrong! midnight was at 2012-04-01 00:00:00+11:00
>>> print datetime(2012, 3, 1, 0, 0, 0, 0, tzinfo=tz)
2012-03-01 00:00:00+10:00 # wrong again!

Однако документация для tz.localize() состояния:

Этот метод должен использоваться, чтобы создать localtimes, вместо того, чтобы передать tzinfo аргумент конструктору даты и времени.

Таким образом, Ваша проблема решена как так:

>>> import pytz
>>> from datetime import datetime, date, time

>>> tz = pytz.timezone("Australia/Melbourne")
>>> the_date = date(2012, 4, 1) # use date.today() here

>>> midnight_without_tzinfo = datetime.combine(the_date, time())
>>> print midnight_without_tzinfo
2012-04-01 00:00:00

>>> midnight_with_tzinfo = tz.localize(midnight_without_tzinfo)
>>> print midnight_with_tzinfo
2012-04-01 00:00:00+11:00

>>> print midnight_with_tzinfo.astimezone(pytz.utc)
2012-03-31 13:00:00+00:00

Никакие гарантии дат до 1582, все же.

43
задан kiamlaluno 7 August 2010 в 04:46
поделиться

4 ответа

В целом можно сказать, что session.gc_maxlifetime указывает максимальное время жизни с момента последнего изменения данных вашего сеанса ( не в последний раз session_start был вызван!). Но обработка сеанса PHP немного сложнее.

Поскольку данные сеанса удаляются сборщиком мусора, который вызывается только session_start с вероятностью session.gc_probability divided Автор session.gc_divisor . Значения по умолчанию - 1 и 100, поэтому сборщик мусора запускается только в 1% всех вызовов session_start . Это означает, что даже если для сеанса уже теоретически истекло время ожидания (данные сеанса были изменены более session.gc_maxlifetime секунд назад), данные сеанса можно использовать дольше указанного срока.

По этой причине я рекомендую вам реализовать собственный механизм тайм-аута сеанса. См. мой ответ на Как мне завершить сеанс PHP через 30 минут? для получения дополнительных сведений.

83
ответ дан 26 November 2019 в 22:33
поделиться

Это тот. Сеанс будет длиться 1440 секунд (24 минуты).

session.gc_maxlifetime  1440    1440
20
ответ дан 26 November 2019 в 22:33
поделиться

Вы ищете gc_maxlifetime, см. http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime для описание.

Ваш сеанс будет длиться 1440 секунд, что составляет 24 минуты (по умолчанию).

8
ответ дан 26 November 2019 в 22:33
поделиться

Если session.cookie_lifetime равно 0, cookie сеанса будет существовать до тех пор, пока браузер не будет закрыт.

РЕДАКТИРОВАТЬ : Другие упоминали параметр session.gc_maxlifetime . Когда происходит сборка мусора сеанса, сборщик мусора удаляет все данные сеанса, к которым не было доступа в течение более session.gc_maxlifetime секунд. Чтобы установить время жизни для файла cookie сеанса, вызовите session_set_cookie_params () или определите параметр PHP session.cookie_lifetime . Если этот параметр больше, чем session.gc_maxlifetime , вам следует увеличить сеанс .

8
ответ дан 26 November 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: