Я пытаюсь внедрить систему входа в систему с функцией «запомнить меня». Это моя моя страница входа в систему: http://pastebin.com/q6iK0Mgy . В этом я пытаюсь продлить срок действия cookie сеанса (PHPSESSIONID), используя session_set_cookie_params (). Но это не работает.
Соответствующая часть кода: в этом выполняется внутренний цикл if (), но session_set_cookie_params ('3600') не оказывает никакого эффекта. Я вызываю session_name (), так как это должно быть требование для session_set_cookie_params () (согласно одному из комментариев к руководству php)
if ( isset($_POST["submit"]) ) { session_name() ; echo "calling before checked " ; if ( $_POST["remember"] == "on") { // extend expiration date of cookie session_set_cookie_params('3600'); echo "<br/>calling after sessions_set_cookie_params" ; } } require_once("includes/session.php"); //session start ?>
Надеюсь, я смог объяснить, что я хочу делать. В основном то, что я пытаюсь сделать, это продлить срок действия session_cookie. мой способ делать совершенно неправильно? есть ли другой способ добиться того же?
благодаря
Никогда не слишком старый для ответа?
Итак, PHP немой . Как и в, он не делает то, что, по вашему мнению, имеет смысл.
session_set_cookie_param ничего не сделает до того момента, когда вы вызовете session_start. Поэтому, если вы задали параметры cookie после начала сеанса сеанса, слишком поздно. Если вы зададите параметры cookie, но затем не вызываете session_start, ничего не происходит.
session_start – тоже забавный зверь. Он только считывает данные cookie в первый раз, когда он называется, – это так, если … вы не заставляете его писать, или нет cookie для начала. Поэтому, если нет cookie, он записывает данные cookie, и клиент сохраняет вашу сессию. ура! Но когда cookie существует уже, как мы вынуждаем его писать, и, следовательно, обновляем нашу новую дату истечения срока действия?
Таким образом, у нас есть этот нечетный эффект, игнорируя все ваши вызовы session_set_cookie_param, если cookie уже существует на клиенте. Еще лучше, если вы явно вызываете setcookie (session_name (), blah blah blah ), php будет STILL не выпустить cookie.
Итак, давайте заставить php испускать cookie.
Это работает, вызывая session_id с единственным значением, которое не будет сжимать ваш существующий сеанс. В документации по адресу http://php.net/session_id указано, что
Примечание. При использовании файлов cookie сеанса указание идентификатора для session_id () всегда будет отправлять новый файл cookie при вызове session_start (), независимо от того, совпадает ли текущий идентификатор сеанса с тем, который установлен.
session_id($_COOKIE[session_name()]);
Так что в любом случае это 6 утра, и я еще не спал, и вы, вероятно, подумали об этом несколько месяцев, если не много лет назад, но какого черта, может быть, я спасу кого-то еще за 2 или 3 часа своей жизни, я никогда не буду вернуться. ха-ха.
Из документации:
Вам нужно вызвать session_set_cookie_params () для каждого запроса и до вызова session_start ().
Также проверьте http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime