Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kłopot z sesjami
Forum PHP.pl > Forum > Przedszkole
-Początkujący-
Mam problem z sesjami, a mianowicie sesja nie kończy się, gdy jestem afk ponad +20 minut - wydaje mi się ze po takim czasie sesja nie powinna już istnieć.
Nawet, gdy wyłącze i włącze przeglądarke to sesja dalej trwa. Dopiero po kliknieciu wyloguj sesja się kończy.
Dopiero się ucze php, więc nie wiem czy kod jest poprawny, na 100% gdzieś zrobiłem błąd.. Proszę mnie nie odsyłać do kursów, bo przeglądałem juz kilka. Manual także mi nie pomógł.

Ogólnie nie wiem czy można tak pisać stronę biggrin.gif ale tak jak wspomniałem, dopiero się uczę - dużo przede mną.

A więc plik index.php

  1. <?php
  2. if (isset($_SESSION['id']) || isset($_SESSION['login'])) {
  3. switch($_GET['akcja']){
  4. case 'profil': include 'profil.php';break;
  5. case 'ustawienia': include 'ustawienia.php';break;
  6. case 'wyjdz': include 'wyloguj.php';break;
  7. case 'nowosci': include 'wyloguj.php';break;
  8. default : include 'news.php';break;
  9. }
  10. }
  11. else {
  12. switch($_GET['akcja']){
  13. case 'zaloguj': include 'login.php';break;
  14. default : include 'zaloguj.php';break;
  15. }
  16. }
  17. ?>


pliki profil.php/ustawienia.php wyglądają podobnie czyli:

  1. include("header.php");
  2. echo "tutaj treść strony";
  3. include("footer.php");


header.php

  1.  
  2. include("config.php");
  3. if (!$_SESSION['login'] || !$_SESSION['id']) {
  4. include("header.php");
  5. echo "Twoja sesja wygasła, zaloguj się ponownie.";
  6. include("footer.php");
  7. }
  8. // dalszy kod, nagłówek menu, html - wiec raczej nic waznego.


foother.php nie bede podawal bo tam jest tylko stopka w htmlu.

config.php

  1. mysql_connect("ip","root","pass");


nie wiem czy to rozpoczecie sesji w configu jest potrzebne.. ale czekam na wasze wypowiedzi wink.gif
bemol
sesja nie może wygasnąć bo nie masz timeoutu. musisz po zalogowaniu usera wprowadzic zmienna sesyjna, która będzie trzymać czas logowania. przy każdej zmianie strony sprawdzasz czas obecny - czas ostatniej aktywnosci, jesli jest wiekszy od jakiejś wartości która Cię interesuje (powiedzmy 10 min). Jeśli nie minęło to w zmienna sesji wstawiasz obecny czas. jesli minelo przekierowujesz do wylogowania, badz niszczysz sesje.
CuteOne
Do "dokładnego" odmierzania czasu zakończenia sesji służą cookie (na necie znajdziesz pełno poradników jak z nich korzystać).
-Początkujący-
Bemol możesz mi to tak szybciutko napisać jak to ma wyglądac? Bo nie wiem czy do końca zrozumiałem smile.gif

Ciasteczka staram się omijać, bo przecież nie każdy musi mieć je włączone.

A już tak przy okazji możecie mi powiedzieć co jest źle w tym co napisałem? biggrin.gif
-Początkujący-
@odświeżam

nie wiem jak zrobić coś takiego jak bemol mi powiedział bez pomocy ciastek.
kpt_lucek
Z php sprawa wygląda tak, że jak się załaduje, to nic bez Twojej ingerencji się nie zrobi (samo z siebie polecenie do serwera nie zostanie wysłane).

Więc możesz to zrobić na przykład tak:
  1.  
  2. $bede_zyc_przez = 60*20; // 20min
  3.  
  4. if(isset($_SESSION['costam']) ) {
  5. $zycie = time() - $_SESSION['costam'];
  6. if($zycie> $bede_zyc_przez)
  7. { session_destroy(); header("Location: wyloguj.php.php"); }
  8. }
  9. $_SESSION['costam'] = time();


Czyli - po załadowaniu się strony, zegar tyka i powiedzmy że użytkownik nie wykonał akcji przez 60 * 20 + 1 sekund, to po następnej akcji będzie się musiał ponownie zalogować (czy co tam z tym zrobisz).
-Początkujący-
Napisałem takie coś, działa ale chciałbym zapytać czy są gdzieś błędy.


Do mysql w dodałem do tabeli users pole online.
W header.php dodałem

  1. $czas = time();
  2. mysql_query("UPDATE users SET online='".$czas."' WHERE id='".$_SESSION['id']."' LIMIT 1"); // przy kazdym odswiezeniu strony dodaje aktualny czas do pola online
  3. $akcja = time() - $user['online']; // licze ile minelo czasu od ostatniej akcji
  4. $czas_sesji = 60*10; // czas trwania sesji - 10 minut
  5. if ($akcja > $czas_sesji && isset($_SESSION['login']) && isset($_SESSION['id'])){
  6. include("header.php");
  7. echo "Twoja sesja wygasła, zaloguj się ponownie, <a href=\"index.php\">kliknij tutaj</a>.";
  8. include("footer.php");
  9. unset($_SESSION['id']);
  10. unset($_SESSION['login']);
  11. unset($_SESSION);
  12. }


i przy logowaniu, gdy dane się zgadzają i następuje zalogowanie i przeniesienie na strone dodałem

  1. mysql_query("UPDATE users SET online='".$czas."' WHERE id='".$_SESSION['id']."' LIMIT 1");


Czy to jest prawidłowo napisane?
papigo
wedlug mnie brak zabezpieczenia sesji i dlatego nie mozna jej zamknac.
-Początkujący-
Cytat(papigo @ 23.10.2011, 15:12:12 ) *
wedlug mnie brak zabezpieczenia sesji i dlatego nie mozna jej zamknac.


Można jaśniej ?smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.