Dla przykładu zrobiłem taki skrypcik:
Kopiuj
<?php
session_start([
'cookie_lifetime' => 3600
]);
$name = $_COOKIE['foo'] ?? '';
$lastVisit = $_SESSION['lv'] ?? 'never';
$_SESSION['lv'] = date('Y-m-d H:i:s');
if (isset($_POST['login'])) {
setcookie('foo', $_POST['login'], 0);
$name = $_POST['login'];
}
?><!DOCTYPE html>
<html>
<body>
<?php if (empty($name)): ?>
<form action="" method="post">
<input type="text" name="login" placeholder="login">
<button type="submit">Go</button>
</form>
<?php else: ?>
Witaj, <?=$name;?>
<?php endif; ?>
<p>Last visit: <?=$lastVisit;?></p>
</body>
</html>
Ponieważ dla sesji jest ustawiony cookie_lifetime, sesja "przetrwa" zamknięcie przeglądarki. W cookie foo przetrzymuję info o loginie - tutaj specjalnie ustawiłem trzeci parametr na 0, żeby było to cookie sesyjne (więc usunie się przy zamknięciu przeglądarki).
Z moim przykładem możesz zrobić eksperyment: otwórz w przeglądarce stronę z tym skryptem (powinieneś miech input i Last visit: never). Zamknij przeglądarkę i znowu wejdź na tę stronę. Powinieneś mieć input i Last visit: [tutaj data]. Teraz wpisz w login coś i kliknij GO. Powinieneś mieć "coś" i zaktualizowane Last visit. Teraz zamknij przeglądarkę i otwórz znowu. Ja mam input i info o ostatniej wizycie.
W Twoim przypadku prawdopodobnie ustawienia sesji masz zmienione gdzieś w php.ini. Możesz to łatwo sprawdzić przez phpinfo();. Teraz masz dwa wyjścia: zostawić tak jak jest a login kontrolować przez osobne cookie tak jak w moim przykładzie albo przestawić cookie_lifetime na 0 - przez php.ini albo tak jak ja to zrobiłem ;)
Przepisałem też Twój przykład, ale działa u mnie tak jak tego oczekujesz. Jeśli mój przykład nie będzie u Ciebie działał jak powinien to spróbuj np. na innym serwerze bo prawdopodobnie masz coś pokićkane w ustawieniach PHPa.
Kopiuj
<?php
ini_set('session.cookie_lifetime', 0);
session_set_cookie_params(0);
session_name('PHPSESSID');
session_start();
session_regenerate_id();
$lastVisit = $_SESSION['lv2'] ?? 'never';
$_SESSION['lv2'] = date('Y-m-d H:i:s');
?>
Last visit: <?=$lastVisit;?>
I jeszcze ostatnia sprawa: jesteś pewny, że zamknąłeś wszystkie okna przeglądarki? ;)