Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]przechwytywanie sesji - skrypt logowania
bialko0019
post
Post #1





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

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


Witam. Tworzę tak dla siebie, dla nauki mozna tak powiedzieć skrypt logowania.

No dobra, zrobiłem formularz. (oczywiscie juz tebala w sql zrobiona i zalozony uzytkownik);
  1. <form action="login.php" method="post">
  2. <br>
  3. <b>Login</b><br>
  4. <input type="text" name="login" style="border : 1px solid #499cf8;"><br>
  5. <b>Hasło</b><br>
  6. <input type="password" name="haslo" style="border : 1px solid #499cf8;">
  7. <br><input type="submit" value="Zaloguj" style="
  8. color : #35424d; font-family : verdana; font-size : 11px; border : 1px solid #e2e7eb;">
  9. </form>


i teraz przejdźmy do pliku login.php

  1. <?php
  2.  
  3. $login = $_POST['login'];
  4. $haslo = $_POST['haslo'];
  5. $haslo_md5 = md5($haslo);
  6.  
  7.  
  8. if(empty($login)){
  9. echo "<br>Wpisz login";
  10. }
  11. else {
  12.  
  13. if(empty($haslo_md5))
  14. {
  15. echo "<br>Wpisz hasło !";
  16. }
  17. else {
  18.  
  19. $config = "config.php";
  20. $otwieram = fopen($config, r);
  21. $czytaj = fread($otwieram, 900);
  22.  
  23. list($serwer, $uzytkownik, $haslo_baza, $baza_danych) = explode("|", $czytaj);
  24.  
  25. fclose($otwieram);
  26.  
  27. $polaczenie = mysql_connect($serwer, $uzytkownik, $haslo_baza) or die('Nie mogę się połączyć z serwerem. Sprawdź jeszcze raz poprawność pól <b>serwer baz danych, użytkownik oraz hasło do bazy</b>. Sprawdź czy nie masz włączonego Caps Locka.');
  28. $db = mysql_select_db($baza_danych) or die('Nie mogę się połączyć z podaną bazą. Sprawdź poprawność pola <b>baza danych</b>.');
  29.  
  30. $zapytanie = "SELECT * FROM `users` WHERE `login` LIKE '$login' AND `haslo` LIKE '$haslo_md5'";
  31. $query = mysql_query($zapytanie) or die('Zapytanie nie może dojść do skutku, bo : <b>' .mysql_error(). ' </b>');
  32.  
  33. $ile = mysql_num_rows($query);
  34.  
  35. if($ile > 0){
  36. echo "<br>Jesteś poprawnie zalogowany. <br><a href='admin.php'>Kliknij, aby przenieść się do Panelu.</a><br><br><i>Aby logowanie chodziło poprawnie, potrzebna jest obsługa COOKIE.";
  37. $session_id = session_id();
  38. $_SESSION['session_id'] = $session_id;
  39. $_SERVER['REMOTE_ADDR'] = $ip;
  40. $_SESSION['ip'] = $ip;
  41. $_SESSION['auth'] = 1;
  42. $_SESSION['login'] = $login;
  43.  
  44. }
  45. else {
  46. echo "<br>Spróbuj jeszcze raz.";
  47. }
  48.  
  49.  
  50. }
  51.  
  52. }
  53.  
  54.  
  55. ?>


Oczywiście config.php jest zabezpieczony przez htaccess ( cba i boo.pl mają ) przez deny from all.


1. Odbieramy z formularza dane.
2. Kodujemy hasło md5().
3. Łączymy się z bazą.
4. Sprawdzamy czy istnieje taki użytkownik i czy hasło jest poprawne.
a) Jeżeli tak, wyświetlamy komunikat.
(IMG:http://forum.php.pl/style_emoticons/default/cool.gif) Jeżeli nie, wyświetlamy komunikat.

Jeżeli wszystko jest poprawnie, wyświetla się komunikat, by przejść na stronę admin.php .
No dobra jesteśmy. I tutaj zaczynają się schody, BO :

  1. <?php
  2.  
  3. $session_id_n = session_id();
  4. $host = $_SERVER['HTTP_HOST'];
  5. $session_id = $_SESSION['session_id'];
  6. $ip_n = $_SERVER['REMOTE_ADDR'];
  7. $czy = $_SESSION['auth'];
  8. $login = $_SESSION['login'];
  9.  
  10.  
  11. $katalog = dirname($_SERVER['PHP_SELF']);
  12. $heander = "http://$host$katalog/panel.php";
  13.  
  14.  
  15. if($session_id_n == $session_id){
  16. if($czy == 1){
  17. echo "<span class='zalogowany'><br>  Witaj <b>$login</b>, jesteś poprawnie zalogowany. Pamiętaj, by zawsze po skończeniu pracy się <b><a href='wyloguj.php'>wylogować</a></b> !</span>";
  18. }
  19. else  {
  20. header("location : $heander");
  21. }
  22. }
  23. else {
  24. header("location : $heander");
  25. }
  26.  
  27.  
  28.  
  29. ?>


1. zaczynamy sesję.
2. Robimy warunek, że gdy zmienna $czy = 1 to poprawna sesja, jeżeli nie przekierowywujemy location zeby sie zalogować.

Jednak jest tutaj problem, ponieważ na jednym serwerze gdy bez logowania przejdziemy do pliku admin.php to normalnie przekierowywuje jezeli sie nikt wczesniej nie zalogował jeżeli zalogował to normalnie plik sie wyświetla. A na drugim serwerze obojętnie czy się ktoś zlogował, czy nie i tak normalnie się wyświetla Panel użytkownika...

I moje pytania ;
1. Dlaczego na jednym serwerze działa ( działa na boo.pl, nie działa na cba.pl - na innych nie próbowałem ) ze przekierowywyuje nas zeby sie zalogować a na drugim nie ?
2. To jest pierwszy mój skrypt, więc jest pewnie baardzo dużo błędów, co w nim poprawić by był bezpieczniejszy ? Bo tak naprawdę tylko jest zakodowanie hasła jak przy rejestracji i nic więcej. i co jest jeszzcze w takim skrypcie nie zbędne ?

Liczę na jakieś wskazówki (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bialko0019
post
Post #2





Grupa: Zarejestrowani
Postów: 294
Pomógł: 4
Dołączył: 19.12.2008

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


Wyświetla, że nie ma nic w zmiennych sesyjnych :
Notice: Undefined index: session_id in /var/www/virtual/katalomagic.l/admin/admin.php on line 8

Notice: Undefined index: auth in /var/www/virtual/katalomagic/admin/admin.php on line 10

Notice: Undefined index: login in /var/www/virtual/katalomagic/admin/admin.php on line 11

- to dobrze, nie ma nic, bo nie jest zalogowany...
ale dałem warunek, że jeżeli nikt nie jest zalogowany to powinno przekierować...

Pozatym przeglądarka nie blokuje, bo skrypt wstawiony na boo.pl śmiga, a na cba.pl serwerze nie.
Może coś serwer blokuje ?

EDIT
Utworzyłem zwykły plik php z samym przekierowaniem. Nic nie ma. Wstawiłem error reporting(e_all) i pokazała się fyfra : 4 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował bialko0019 9.07.2009, 14:20:08
Go to the top of the page
+Quote Post

Posty w temacie


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: 28.09.2025 - 10:30