Как мне создать постоянные сессии в PHP? - PullRequest
28 голосов
/ 21 марта 2012

Я использовал session_start() для запуска сеанса в PHP, но когда мой браузер закрывается, сеанс исчезает.

Как использовать PHP для создания постоянных сеансов, которые длятся в браузере, закрываются?

Ответы [ 4 ]

55 голосов
/ 21 марта 2012

См. Значение php.ini session.cookie_lifetime .

Значение по умолчанию 0 означает завершение сеанса при закрытии браузера.

Вы можетепереопределите это значение либо непосредственно в php.ini, либо установите его в своем приложении перед началом сеанса, используя ini_set .Если для него задано значение, большее 0, сеанс будет работать в течение этой продолжительности.

Например,

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);  // 7 day cookie lifetime
session_start();

В приведенном выше примере файл cookie сеанса будет установлен с истечением 7дней с момента начала сеанса.

Примечание: Если вы начнете сеанс для всех своих веб-страниц с одного и того же куска кода, это не будет продолжать продлевать срок действия сеанса каждый разsession_start() вызывается.Срок действия файла cookie задается с момента первого запуска сеанса, а не для последующих запросов.Если вы хотите продлить срок действия сеанса на 7 дней от текущего времени, см. Также session_regenerate_id () .

Также обратите внимание: Если ваш Параметр session.gc_maxlifetime имеет значение, меньшее длины файла cookie сеанса, может возникнуть ситуация, когда пользователь не посещает сайт в течение 5 дней, а когда он возвращается, файл cookie сеанса больше не действует, так какданные на сервере были удалены.Чтобы исправить это, вы должны также установить время жизни для этих данных сеанса, по крайней мере, столько же, сколько и время жизни ваших файлов cookie.Как указано в руководстве, может потребоваться использовать пользовательский session.save_path для данных сеанса, которые вы хотите сохранить дольше, чем по умолчанию.Поэтому ваш скрипт может выглядеть так:

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);
ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 7);
ini_set('session.save_path', '/home/yoursite/sessions');
session_start();
2 голосов
/ 13 июля 2017

Вы можете начать сеанс, не набирая session_start(), и вы можете запустить его с помощью cookie, как это

setcookie('PHPSESSID','any id' , any time);

, это может быть сделано, потому что когда вы набираете session_start(), а затем пытаетесь выглядеть как cookieэто

print_r($_COOKIE);

тогда выход будет:

Array ( [PHPSESSID] => c0voj7h0b4aesddkc17a6jk7c3 )

просто попробуйте сами

2 голосов
/ 21 марта 2012

Я бы порекомендовал использовать куки и базу данных, если вы хотите постоянный сеанс. Мы сохраняем идентификатор клиента (случайное 32-разрядное буквенно-цифровое значение) в файле cookie, а затем ссылаемся на него, чтобы загрузить информацию о клиенте.

2 голосов
/ 21 марта 2012

Сессии спроектированы так, что они основаны на «Сессии»Другими словами, если вы закроете свой браузер (который по сути является вашим сеансом), он, вероятно, уйдет.

Вы можете попытаться сохранить данные сеанса в базе данных, а не в файле.Сохраните идентификатор сеанса и данные сеанса в таблице.Затем вызовите идентификатор сеанса из файла cookie PHPSESSID (по умолчанию) и найдите данные сеанса из вашей базы данных.

...