Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Logowanie - zapisanie logów
Forum PHP.pl > Forum > Przedszkole
d3f3nd3r
Witam

Napisałem sobie pewnego CMSa i loguję się do PA za pomocą PHP_AUTH w zainkludowanym pliku.

Męczę się z zapisywaniem logów z logowania do bazy (ip, host przeglądarka itp. logującego się), tzn. logi jesli ktoś błędnie wpisze login czy hasło są poprawnie zapisywane. Problem pojawia się gdy ktoś się zaloguje (też wszystko jest zapisywane w bazie tak jak chcę) ale po każdej czynności admina logi znowu są dodawane do bazy (chcę uzyskać efekt 1 poprawne zalogowanie - 1 wpis do bazy).

W trakcie pisania tego posta wpadłem na pomysł, że mógłbym to zrobić na czasie tzn. że będę sprawdzał w bazie czy od zalogowania upłynęło np 15 minut (przez ten czas logi nie były by dodawane).

Czy jest jest jakieś prostsze rozwiązanie? 

blade-mrn
A nie prościej zapisywać informacje w logach tylko raz podczas weryfikacji danych podanych przy logowaniu?
Wystarczyła by jedna instrukcja warunkowa sprawdzająca czy dany użytkownik został zalogowany czy nie, po czym następował by zapis stosownych informacji do bazy.
d3f3nd3r
klucz.php

  1.  
  2. <?php
  3.  
  4.      $_SERVER['PHP_AUTH_PW'] = md5($_SERVER['PHP_AUTH_PW']);
  5.  
  6. if (!isset($_SERVER['PHP_AUTH_USER']))
  7.  
  8. {
  9. Header ("WWW-Authenticate: Basic realm=\"Panel logowania\"");
  10. Header ("HTTP/1.0 401 Unauthorized");
  11. exit();
  12. }
  13.  
  14. else {
  15. $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
  16. $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
  17.  
  18. }
  19.  
  20. $query = "SELECT id, haslo FROM users WHERE nick='".$_SERVER['PHP_AUTH_USER']."'";
  21. $lst = @mysql_query($query);
  22.  
  23.  
  24.  
  25.  
  26. if (!$lst)
  27. {
  28. Header ("WWW-Authenticate: Basic realm=\"Panel logowania\"");
  29. Header ("HTTP/1.0 401 Unauthorized");
  30. exit();
  31. }
  32.  
  33. if (mysql_num_rows($lst) == 0)
  34. {
  35.  
  36. //login ktorego nie ma w bazie
  37. $result = mysql_query("INSERT INTO logi (data, czas, ip, host, przegla, admin, idadmina, logujacy) VALUES ('$data', '$aktu_czas', '$aktu_ip', '$host', '$przegla', '', '', '$logujacy')");
  38.  
  39. Header ("WWW-Authenticate: Basic realm=\"Panel logowania\"");
  40. Header ("HTTP/1.0 401 Unauthorized");
  41. exit();
  42. }
  43.  
  44. $haslo = @mysql_fetch_array($lst);
  45. $id=$haslo['id'];
  46. if ($_SERVER['PHP_AUTH_PW']!= $haslo['haslo'])
  47. {
  48. //login znajduje sie w bazie ale bledne haslo
  49. $result = mysql_query("INSERT INTO logi (data, czas, ip, host, przegla, admin, idadmina, logujacy) VALUES ('$data', '$aktu_czas', '$aktu_ip', '$host', '$przegla', '', '$id', '$logujacy')");
  50.  
  51.  
  52. Header ("WWW-Authenticate: Basic realm=\"Panel logowania\"");
  53. Header ("HTTP/1.0 401 Unauthorized");
  54. exit();
  55. }
  56.   else {
  57.  
  58. //po zalogowaniu
  59. $result = mysql_query("INSERT INTO logi (data, czas, ip, host, przegla, admin, idadmina, logujacy) VALUES ('$data', '$aktu_czas', '$aktu_ip', '$host', '$przegla', '$logujacy', '$id', '')");
  60. }
  61.  
  62. }
  63.  
  64. ?>
  65.  
  66.  


Wilk002
Poczytaj o takiej klasie ułatwia pracę z logami. winksmiley.jpg
http://incubator.apache.org/log4php/apidoc...gerManager.html
thek
Ja do problemu podszedłem jeszcze inaczej. Prosta klasa logująca, której wystarcza przecież tylko model, a którą wywołuję w potrzebnym mi miejscu.
  1. class Logi_Model {
  2. protected $file = false;
  3. public function __construct($filename = false) {
  4. if ( !$this->file AND $filename ) {
  5. $this->file = fopen( 'logs/'.$filename.'.log', 'a');
  6. } else
  7. die();
  8. }
  9.  
  10. public function __destruct() {
  11. if($this->file)
  12. fclose($this->file);
  13. }
  14.  
  15. public function dopisz($tekst) {
  16. if($this->file)
  17. return fwrite( $this->file, $tekst."\n" );
  18. }
  19. }
A użycie?
  1. $fp = new Logi_Model( 'koniec_terminu' );
  2. $fp->dopisz( date('Y-m-d H:i:s').' -> 'Wejście z adresu IP: '.$_SERVER['REMOTE_ADDR']);
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.