Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Kłopot z sesjami
--Początkujący--
post
Post #1





Goście







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ę (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
bemol
post
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 29
Dołączył: 5.04.2007
Skąd: Rymanów Zdrój/Rzeszów

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
CuteOne
post
Post #3





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Do "dokładnego" odmierzania czasu zakończenia sesji służą cookie (na necie znajdziesz pełno poradników jak z nich korzystać).

Ten post edytował CuteOne 22.10.2011, 22:03:37
Go to the top of the page
+Quote Post
--Początkujący--
post
Post #4





Goście







Bemol możesz mi to tak szybciutko napisać jak to ma wyglądac? Bo nie wiem czy do końca zrozumiałem (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
--Początkujący--
post
Post #5





Goście







@odświeżam

nie wiem jak zrobić coś takiego jak bemol mi powiedział bez pomocy ciastek.
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #6





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
--Początkujący--
post
Post #7





Goście







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?
Go to the top of the page
+Quote Post
papigo
post
Post #8





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 30.04.2010

Ostrzeżenie: (10%)
X----


wedlug mnie brak zabezpieczenia sesji i dlatego nie mozna jej zamknac.
Go to the top of the page
+Quote Post
--Początkujący--
post
Post #9





Goście







Cytat(papigo @ 23.10.2011, 15:12:12 ) *
wedlug mnie brak zabezpieczenia sesji i dlatego nie mozna jej zamknac.


Można jaśniej ?(IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 20:29