Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja zapisująca sesje do bazy danych MySQL
Forum PHP.pl > Forum > PHP
tomlis20
Witam serdecznie.

Próbuję stworzyć własny system (a właściwie mini-system) przechowywania sesji w bazie danych MySQL.

O to moje 3 magiczne pliki:

Plik funkcje.php
  1. /*---------------- CHECK_IF_COOKIES --------------------
  2. funkcja sprawdza czy uzytkownik ma wlaczone ciesteczka
  3. -------------------------------------------------------*/
  4. function check_if_cookies()
  5. {
  6. // zagniezdzenie testowego ciasteczka
  7. $temp_cookie = setcookie('test','1',time()+60);
  8.  
  9. // sprawdzenie czy ciasteczko utworzylo sie
  10. if(isset($_COOKIE['test']) AND $_COOKIE['test'] == 1)
  11. {
  12. // jezeli tak zwroc true
  13. return true;
  14. }
  15. else
  16. {
  17. // jezeli nie zwroc false
  18. return false;
  19. }
  20. }
  21.  
  22. /*------------------- zapisz_sesje ---------------------
  23. funkcja zapisuje dane o uzytkowniku do bazy danych
  24. -------------------------------------------------------*/
  25. function zapisz_sesje($id_sesji,$hash,$userid,$login,$ip,$agent,$data)
  26. {
  27. // zapisuje boolean w zmiennej
  28. $sprawdz = check_if_cookies();
  29. // jezeli dzialaja cookies
  30. if($sprawdz == true)
  31. {
  32. // wyzeruj hash, gdyz ciasteczko z id sesji zostalo utworzone
  33. $hash = 0;
  34. $q = "INSERT INTO sesje(id_sesji,hash,userid,login,ip,agent,data)
  35. VALUES ('$id_sesji','$hash','$userid','$login','$ip','$agent','$data')";
  36. $r = mysqli_query($dbc,$q);
  37. }
  38. // jezeli nie
  39. else
  40. {
  41. // w razie czego wyzeruj id_sesji, bedzie nie potrzebne, uzywamy zmiennej $hash do identyfikacji usera
  42. $id_sesji = 0;
  43. $q = "INSERT INTO sesje(id_sesji,hash,userid,login,ip,agent,data)
  44. VALUES ('$id_sesji','$hash','$userid','$login','$ip','$agent','$data')";
  45. $r = mysqli_query($dbc,$q);
  46. }
  47. }


Plik logowanie.php
  1. // gdzies w pliku ....
  2.  
  3. $hash = random_hash(); // funkcja generujaca hash dla uzytkownikow bez obslugi cookies
  4. $agent = check_agent(); // sprawdzenie przegladarki
  5. $data = time(); // aktualny czas UNIX
  6.  
  7. // zmienna $db['id'] wynika z wyczytania danych uzytkownika na podstawie loginu i hasla poodanych w formularzu
  8. zapisz_sesje($PHPSESSID,$hash,$db['id'],$login,$REMOTE_ADDR,$agent,$data);
  9. // ....


Dodam, że calosc jest include w index.php, czyli w skrocie wyglada to podobnie jak to:
index.php
  1. require_once(PLIK_KONFIGURACYJNY);
  2. include('funkcje.php');
  3. include('logowanie.php');


Problem w tym, ze zapytanie w pliku logowanie.php, a wlasciwie podanie parametrow do funkcji zapisz_sesje() ktora wykonuje zapytanie, nie dziala. Kiedy przekleje na surowo zapytanie do logowanie.php sesja sie zapisuje, ale w 'oryginalnej' formie jak pokazalem wyzej wszystko lezy.

Jest ktos wstanie wskazac blad w moich wypocinach?

Dziękuje uprzejmie.
Tomek.
Zyx
Wszystko przez burdel w kodzie. Do mysqli_query() podajesz uchwyt połączenia z bazą danych, tylko tego uchwytu w żaden sposób nie przekazujesz do funkcji.
tomlis20
Faktycznie.

I po sprawie smile.gif

teraz funkcja zapisz_sesje() wyglada nastepujaco:

funkcje.php
  1. function zapisz_sesje($con,$id_sesji,$hash,$userid,$login,$ip,$agent,$data);


a w logowaniu przekazuje zmienna z polaczenie do MySQL ($dbc);

logowanie.php
  1. zapisz_sesje($dbc,$wartosc_sesji,$hash,$db['id'],$login,$REMOTE_ADDR,$agent,$data);


Cacy!

Dziękuje 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.