Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zanikająca sesja?
smagul
post
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 17.02.2009

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


Witam, zrobiłem prosty panel administracyjny. Niestety użytkownicy (szczególnie ci z firefox) zgłaszają że są wylogowywani co chwila bez kliknięcia w 'wyloguj' (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) nie wiem czemu.

oto najważniejsze elementy tego systemu:

  1. <?php session_start(); ?>
  2. ble ble ble...
  3. <body>
  4. <?php //ustalanie danych sesyjnych
  5.  if (!isset($HTTP_SESSION_VARS['prezenter_online'])) $HTTP_SESSION_VARS['prezenter_online']=0; //jeśli nie wiadomo czy jest zalogowany, to zakładamy że nie jest
  6.  if (isset($HTTP_GET_VARS['login']) && $HTTP_GET_VARS['login']==0) { //jeśli zmienna login ma wartość 0 to wylogowuje uzytkownika
  7.      $HTTP_SESSION_VARS['prezenter_online']=0;
  8.      unset($HTTP_SESSION_VARS['prezenterid']);
  9.      unset($HTTP_SESSION_VARS['prezentername']);
  10.      unset($HTTP_SESSION_VARS['prezentertype']);
  11.  }
  12.  else if (isset($HTTP_GET_VARS['login']) && $HTTP_GET_VARS['login']==1) { //zalogowanie użytkownika
  13.      $login=$HTTP_POST_VARS['usernazwa'];
  14.  $password=$HTTP_POST_VARS['userhaslo'];
  15.  connectionadmin();
  16.  $zapytanie=mysql_query("SELECT * FROM users WHERE username='".$login."' AND userpassword='".$password."' AND activ=1"); //active to sprawdzenie czy uzytkownik aktywował konto, $password jest jeszcze kodowane ale ten fragment również usunałem.
  17.  $sprawdz=mysql_num_rows($zapytanie);
  18.  disconnectionadmin();
  19.  if(!$sprawdz){ //jeżeli SQL nie zwrócił wyników to uzytkownik dalej nie jest zalogowany
  20.      $HTTP_SESSION_VARS['prezenter_online']=0;
  21.      $wiadomosc['login']="<p style=\"color: red; text-align: center;\">Błędny login lub hasło</p>";
  22.  }
  23.  else{
  24.      while ($tab=mysql_fetch_assoc($zapytanie)){ //jeśli podał poprawne dane to zapamiętuje w sesji najważniejsze dane.
  25.          $HTTP_SESSION_VARS['prezenterid']=$tab["id"];
  26.          $HTTP_SESSION_VARS['prezentername']=$tab["username"];     
  27.          $HTTP_SESSION_VARS['prezentertype']=$tab["usertype"];
  28.      }
  29.  $prezentertype=explode("-", $HTTP_SESSION_VARS['prezentertype']); //a tutaj sprawdzenie czy dana osoba ma prawo oglądać tę stronę
  30.  if($prezentertype[0]==2) $HTTP_SESSION_VARS['prezenter_online']=1;
  31.  else $wiadomosc['login']="<p style=\"color: red; text-align: center;\">Brak uprawnień</p>";
  32.  }
  33.  }
  34. ?>
  35. ble ble ble
  36. <?php if($HTTP_SESSION_VARS['prezenter_online']==1) { //sprawdzam czy user jest zalogowany, jeśli tak to może przeglądać treść strony ?>
  37. ble ble ble - treść strony
  38. <?php }
  39.       else { //sprawdzanie czy user jest online koniec!! ?>
  40.     <?php echo $wiadomosc['login']; //informacja o praku uprawnień lub złym haśle ?>
  41. ble ble ble    formularz do logowania
  42. <?php } //koniec okna logowania?>
  43. </body>
  44. </html>


w treści strony nie zmieniam ani razu wartości zmiennej 'prezenter_online' nie zachodzi równiez zamknięcie sesji nigdzie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . na moim komputerze na operze ani na ie nigdy nie nastąpiło wylogowanie ... na innych niestety takie rzeczy się trafiają... nie wiem już co robić :/ ciasteczka?
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #2





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


A czemu korzystasz z tych przestarzałych nazw? Dziś używamy $_SESSION/$_POST/$_GET itd. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post
Spawnm
post
Post #3





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




$HTTP_SESSION_VARS['prezentertype'] , $HTTP_GET_VARS['login'] ? php 4?
teraz się daje $_SESSION i $_GET.
//$password=$HTTP_POST_VARS['userhaslo'];
nie filtrujesz danych.
  1. <?php
  2. if (isset($HTTP_GET_VARS['login']) && $HTTP_GET_VARS['login']==0) {
  3. ?>

daj zamiast tego to:
  1. <?php
  2. if($_GET['logout']=='logout'){
  3. ?>

i w html
<a href='index.php?logout=logout'>wyloguj</a>
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #4





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Nawet w PHP4 były już nowe nazwy. Faktycznie, ten sposób wylogowania jest bardzo dziwny... Zrób coś w stylu action=logout, będziesz mógł dopisać inne akcje (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
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: 20.12.2025 - 21:47