Usunięcie sesji po zamknięciu przeglądarki

Usunięcie sesji po zamknięciu przeglądarki
WP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0

Sesja jest nadal aktywna po zamknięciu przeglądarki i nie tylko zakładki ale całej przeglądarki.

Kopiuj
<?php
ini_set('session.cookie_lifetime',0);
session_set_cookie_params(0);
session_name('PHPSESSID');
session_start();
session_regenerate_id();
itd...

Coś zle robię ???

axelbest
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 2255
0

Nie wklejasz całego kodu - to jest właśnie przyczyna tego co robisz źle. Skąd mamy wiedzieć co jest dalej, A wiesz jak działa sesja? Szukałeś chociaż w google'ach
how to destroy session on browser close in php?

A tak na serio - weź kup jakąś książkę od phpa albo kurs jakiś zrób od A do Z i dopiero wtedy pytaj, bo teraz każdy Twój problem wskazuje, że masz prawie zerowe pojęcie na te tematy i o każdą rzecz musisz po 10 razy dopytywać, gdzie nawet sam nie wiesz czego potrzebujesz (tak jak w tym poście php injection jak się ustrzec ).

WP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0
axelbest napisał(a):

Nie wklejasz całego kodu - to jest właśnie przyczyna tego co robisz źle. Skąd mamy wiedzieć co jest dalej, A wiesz jak działa sesja? Szukałeś chociaż w google'ach
how to destroy session on browser close in php

Dalej juz jest treśc strony.

axelbest
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 2255
AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

Ustaw w przeglądarce kasowanie plików cookie przy zamknięciu i problem rozwiązany ;D

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 134
  • Rejestracja: dni
  • Ostatnio: dni
0

A moze po prostu ustawic czas po jakim sesja sama wygasnie kiedy uzytkownik nie wykazuje aktywnosci?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Wklejanie losowych funkcji z internetu nie rozwiąże Twojego problemu ;-)

Istnieją dwa rodzaje ciasteczek:

Ciasteczka sesyjne są (na ogół) automatycznie usuwane przez przeglądarkę po jej zamknięciu, podczas gdy ciasteczka trwałe są ważne np. przez 30 dni.

Ciasteczko PHPSESSID, zawierające id sesji z PHPa, przeważnie domyślnie jest ciasteczkiem sesyjnym - czyli zachowuje się tak, jak gdybyś tego chciał (usunie się po zamknięciu okna przeglądarki).

Możesz opowiedzieć, co dokładnie wykonujesz i jak sprawdzasz, czy sesja nadal jest aktywna?
Byłoby też miło, gdybyś przygotował MCVE.

WP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0
Patryk27 napisał(a):

Wklejanie losowych funkcji z internetu nie rozwiąże Twojego problemu ;-)

Istnieją dwa rodzaje ciasteczek:

Ciasteczka sesyjne są (na ogół) automatycznie usuwane przez przeglądarkę po jej zamknięciu, podczas gdy ciasteczka trwałe są ważne np. przez 30 dni.

Ciasteczko PHPSESSID, zawierające id sesji z PHPa, przeważnie domyślnie jest ciasteczkiem sesyjnym - czyli zachowuje się tak, jak gdybyś tego chciał (usunie się po zamknięciu okna przeglądarki).

Możesz opowiedzieć, co dokładnie wykonujesz i jak sprawdzasz, czy sesja nadal jest aktywna?
Byłoby też miło, gdybyś przygotował MCVE.

To nie jest losowy kod z netu. To górna część pliku.
Sprawdzam podając zarejestrowaną sesje:

Kopiuj
gora j/w

echo $_SESSION['nazwa'];

Chyba że chodzi Ci o coś innego. Problem w tym że cały czas jestem zalogowany. Wczoraj nawet zrestartowałem kompa i dalej to samo.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Poprosiłem Cię o przygotowanie MCVE - bez tego ani rusz dalej.

WP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0
Patryk27 napisał(a):

Poprosiłem Cię o przygotowanie MCVE - bez tego ani rusz dalej.

Niestety nie dam rady teraz. Za dużo z tym roboty a przy dwójce małych dzieci to rzecz praktycznie niewykonalna.

arczinosek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 86
0

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? ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.