Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z autentycznoscia sesji
Forum PHP.pl > Forum > PHP
piotrekk
Witam,
mam następujący problem.
Tworze witrynę do której przypisałem sesje. Funkcja zapisująca login do sesji wygląda następująco:
  1. <?php
  2. function registerLogin($login)
  3. {
  4.  // Rejestracja loginUsername w celu pokazania, ze uzytkownik jest zalogowany
  5.  $_SESSION["login"] = $login;
  6.  
  7.  // Rejestracja adresu IP dla uruchomionej sesji
  8. $_SESSION["loginIP"] = $_SERVER["REMOTE_ADDR"];
  9. }
  10. ?>


Wykorzystuje ją przy logowaniu. Następnie po zalogowaniu przenoszony jestem do głównego miejsca, gdzie moge dokonywać zakupów. Klikając na koszyk wykonowany jest skryp szybkiego zamowienia, gdzie sesja sprawdzana jest w następujący sposób.

  1. <?php
  2. function autentycznoscSesji()
  3. {
  4. if(isset($_SESSION["login"]))
  5. {
  6. unregisterLogin();
  7. header("Location : ../panelLogowanie.php");
  8. }
  9. // sprawdza czy wywolanie pochodzi z innego adresu ip niz na poczatku
  10. elseif($_SESSION["loginIP"] != $_SERVER["REMOTE_ADDR"])
  11. {
  12. // WYWOLANIE POCHODZI Z INNEGO KOMPUTERA NIZ KOMPUTER UZYTY WCZESNIEJ, MOZLIWE ZE 
    KTOS CHCE PRZECHWYCIC SESJE
  13. //isset($_SESSION["loginIP"]) || 
  14.  
  15. unregisterLogin();
  16. header("Location: ../panelLogowanie.php");
  17. }
  18.  
  19.  
  20. }
  21. ?>

Gdy nie jestem zalogowany wszystko działa poprawnie i przenoszony jestem do panelu logowania, jednak gdy sie zaloguje funkcja nie działa poprawnie i nie wykonywana jest dalsza cześć skryptu.
Proszę o pomoc, jeżeli potrzebne są jakieś dodatkowe informacje to oczywiście je napisze.

dzięki !
Cezar708
Problem jest chyba w tym kawałku kodu.

Cytat(piotrekk @ 6.08.2007, 06:31:22 ) *
  1. <?php
  2. if(isset($_SESSION["login"]))
  3. {
  4. unregisterLogin();
  5. header("Location : ../panelLogowanie.php");
  6. }
  7. ?>


wg mnie powinno być :
  1. <?php
  2. if(!isset($_SESSION["login"]))
  3. ?>


lub:
  1. <?php
  2. if(empty($_SESSION["login"]))
  3. ?>


ponieważ teraz u Ciebie jest tak, że jeśli user jest zalogowany to... przenosi go na stronę logowania worriedsmiley.gif ...
piotrekk
Masz racje Cezar708, tylko jak to zrobie to przed zalogowaniem nie dziala przeslanie do strony panelLogowania.php poprostu nic sie nie pokazuje.


prosze o kolejne podpowiedzi.

dzieki pozdrawiam
Cezar708
Ogólnie powinno działać w ten sposób, że jeśli user jest nie zalogowany to po prostu przechodzi na stronę logowania (panelLogowanie.php). Nie wiem co jest nie tak. Może prześlesz kawałek kodu mówiący o tym jak i gdzie wywołujesz funkcję autentycznoscSesji() oraz jak wygląda funkcja unregisterLogin(). Byc może w tch kawałkach kodu masz jakiś błąd, bo w tym co mi przesłałeś to wszystko wygląda OK.
piotrekk
Sprawa wygląda nastepująco

jest plik ulotka.php po kliknieciu w koszyk przechodzi do szybkieZamowienieUlotka.php, gdzie wywolywany jest kod:
  1. <?
  2. //1. sprawdzanie czy uzytkownik jest zareejstrowany ( spr. sesji)
  3. require_once "include/function.php";
  4. require_once "include/mysql.inc";
  5.  
  6. autentycznoscSesji();
  7. ?>

(oczywiscie to jest istotny fragment)

funkcja autentycznoscSesji:
  1. <?php
  2. function autentycznoscSesji()
  3. {
  4. if(!isset($_SESSION["login"]))
  5. {
  6. unregisterLogin();
  7. header("Location : ../panelLogowanie.php");
  8. }
  9. // sprawdza czy wywolanie pochodzi z innego adresu ip niz na poczatku
  10. if(!isset($_SESSION["loginIP"]) || ($_SESSION["loginIP"] != $_SERVER["REMOTE_ADDR"]))
  11. {
  12. // WYWOLANIE POCHODZI Z INNEGO KOMPUTERA NIZ KOMPUTER UZYTY WCZESNIEJ, MOZLIWE ZE 
    KTOS CHCE PRZECHWYCIC SESJE
  13. //isset($_SESSION["loginIP"]) || 
  14.  
  15. unregisterLogin();
  16. header("Location: ../panelLogowanie.php");
  17. }
  18. }
  19. ?>

(przed chwila troche ja zminilem wlasnie)
a to dwie pozostale funkcje:
[/php]function registerLogin($login)
{
// Rejestracja loginUsername w celu pokazania, ze uzytkownik jest zalogowany
$_SESSION["login"] = $login;

// Rejestracja adresu IP dla uruchomionej sesji
$_SESSION["loginIP"] = $_SERVER["REMOTE_ADDR"];
}
function unregisterLogin()
{
// Sprawdzenie, czy uytkownik nie jest zalogowany.
if (isset($_SESSION["login"]))
unset($_SESSION["login"]);

if (isset($_SESSION["loginIP"]))
unset($_SESSION["loginIP"]);
}
  1.  
  2. Chyba wszystko pzd
  3.  
  4. Na wszelki wypadek wrzuce jeszcze calosc szybkiegoZamowieniaUlotki.php
  5. mozt to cos da:
  6. [php]<?
  7. //1. sprawdzanie czy uzytkownik jest zareejstrowany ( spr. sesji)
  8. require_once "include/function.php";
  9. require_once "include/mysql.inc";
  10.  
  11. autentycznoscSesji();
  12.  
  13. $format = strip_tags($_GET['format']);
  14. $ilosc = strip_tags($_GET['ilosc']);
  15. $kolor = strip_tags($_GET['kolor']);
  16. $cena = strip_tags($_GET['cena']);
  17. $login = $_SESSION['login'];
  18. if (!($connection = @mysql_connect($host, $dbLogin, $haslo)) || !mysql_select_db($baza, $connection)) 
  19. {
  20. die("Wystapił problem z połaczeniem z bazą danych, prosimy powiadomić o tym właś
    ciciela serwisun"
    );
  21. }
  22. $sql = mysql_query("SET names utf8", $connection);
  23. $query = "SELECT nazwa, adres, kod, nip, miasto FROM users WHERE login = '$login'";
  24.  
  25. $result = mysql_query($query, $connection);
  26.  
  27. $row = mysql_fetch_array($result);
  28.  
  29. $nazwa = $row["nazwa"];
  30. $adres = $row["adres"];
  31. $kod = $row["kod"];
  32. $nip = $row["nip"];
  33. $miasto = $row["miasto"];
  34. // nazwa sesji produktów
  35. $_SESSION["produkt"]["format"] = $format;
  36. $_SESSION["produkt"]["ilosc"] = $ilosc;
  37. $_SESSION["produkt"]["kolor"] = $kolor;
  38. $_SESSION["produkt"]["cena"] = $cena;
  39.  
  40. //sesja danych zamawiajacego
  41. $_SESSION["dane"]["nazwa"] = $nazwa;
  42. $_SESSION["dane"]["adres"] = $adres;
  43. $_SESSION["dane"]["kod"] = $kod;
  44. $_SESSION["dane"]["nip"] = $nip;
  45. $_SESSION["dane"]["miasto"] = $miasto;
  46.  
  47. print "Tu jest Html";
  48. ?>
Cezar708
na poczatek to zmieniłbym:
  1. <?php
  2. function unregisterLogin()
  3. {
  4. unset($_SESSION["login"]);
  5. unset($_SESSION["loginIP"]);
  6. }
  7. ?>

w końcu jak kolesia wylogowywujesz to nie muszisz sprawdzać czy istnieje ( w najgorszym razie nie istnieje i tak usuwasz )

po drugie zamień:
  1. <?php
  2. function autentycznoscSesji()
  3. {
  4. if (  !isset($_SESSION["login"]) 
  5.  || !isset($_SESSION["loginIP"]) 
  6.  || ($_SESSION["loginIP"] != $_SERVER["REMOTE_ADDR"])
  7. ) {
  8. return false;
  9. }
  10. return true;
  11. }
  12. ?>


i dopiero obsługę zrób w kodzie (ewentualnie dopisz jeszcze jakąś funkcję):

  1. <?php
  2. //1. sprawdzanie czy uzytkownik jest zareejstrowany ( spr. sesji)
  3. require_once "include/function.php";
  4. require_once "include/mysql.inc";
  5.  
  6.  
  7. if ( !autentycznoscSesji() ){
  8. unregisterLogin();
  9. header("Location : ../panelLogowanie.php");
  10. die;
  11. }
  12.  
  13. // dalsza część
  14. ?>


być może błąd wynika z tego że w niektórych przypadkach Twoja funkcja nie podejmuje żadnej akcji a ma to miejsce w momencie gdy usr jest niezalogowany. Sprawdź jak to działa.
piotrekk
Hej, po zalogowaniu wszystko dziala, jednak zanim sie zaloguje i klikam na koszyk, żeby sprawdzic jak zareaguje nie przenosi do paneluLogowania.php tylko pokazuje bialy ekran.

czyli sytuacja jak wczesniej. Strona wsi na serwera AZ.PL


w ogole to zauwazylem ze nawet jak nie jestem zalogowany to nie stara sie przejsc do panelu logowania tylko pozostaje w szybkim zamowieniu.

Ostatecznie zrobiłem nawet tak:
  1. <?
  2. //1. sprawdzanie czy uzytkownik jest zareejstrowany ( spr. sesji)
  3. require_once "include/function.php";
  4. require_once "include/mysql.inc";
  5.  
  6.  
  7. if (!isset($_SESSION["login"]) || !isset($_SESSION["loginIP"]) || ($_SESSION["loginIP"] != $_SERVER["REMOTE_ADDR"])) {
  8. unregisterLogin();
  9. header("Location : panelLogowanie.php");
  10. die;
  11. }
  12. else{
  13.  
  14. /*if (!autentycznoscSesji())
  15. {
  16.   unregisterLogin();
  17.   header("Location : panelLogowanie.php");
  18.   die;
  19. }*/
  20.  
  21. $format = strip_tags($_GET['format']);
  22. $ilosc = strip_tags($_GET['ilosc']);
  23. $kolor = strip_tags($_GET['kolor']);
  24. $cena = strip_tags($_GET['cena']);
  25. $login = $_SESSION['login'];
  26. if (!($connection = @mysql_connect($host, $dbLogin, $haslo)) || !mysql_select_db($baza, $connection)) 
  27. {
  28. die("Wystapił problem z połaczeniem z bazą danych, prosimy powiadomić o tym właś
    ciciela serwisun"
    );
  29. }
  30. $sql = mysql_query("SET names utf8", $connection);
  31. $query = "SELECT nazwa, adres, kod, nip, miasto FROM users WHERE login = '$login'";
  32.  
  33. $result = mysql_query($query, $connection);
  34.  
  35. $row = mysql_fetch_array($result);
  36.  
  37. $nazwa = $row["nazwa"];
  38. $adres = $row["adres"];
  39. $kod = $row["kod"];
  40. $nip = $row["nip"];
  41. $miasto = $row["miasto"];
  42. // nazwa sesji produktów
  43. $_SESSION["produkt"]["format"] = $format;
  44. $_SESSION["produkt"]["ilosc"] = $ilosc;
  45. $_SESSION["produkt"]["kolor"] = $kolor;
  46. $_SESSION["produkt"]["cena"] = $cena;
  47.  
  48. //sesja danych zamawiajacego
  49. $_SESSION["dane"]["nazwa"] = $nazwa;
  50. $_SESSION["dane"]["adres"] = $adres;
  51. $_SESSION["dane"]["kod"] = $kod;
  52. $_SESSION["dane"]["nip"] = $nip;
  53. $_SESSION["dane"]["miasto"] = $miasto;
  54.  
  55. print "tekst html";}
  56. ?>


i nadal nic nie dziala wyglada na to jakby w ogole nie dochodzilo do sprawdzenia.
nie wiem czy to cos ma w tej sprawie ale session_start() wykonuje juz w pliku ulotki.php, czyli pierwszym po
wejsciu na stronie.
Cezar708
Cholera, cudów nie ma, masz pusty ekran znaczy że masz jakiś błąd, który powinien Ci pokazać error_log... masz jakiś dostęp? W ogóle w jakiś sposób Ci loguje błędy? Może uda Ci się za pomocą funkcji error_reporting() uda Ci się ustawić i sprawdzić co Ci się wywala... bo jakoś nic logicznego do głowy mi nie przychodzi. sposób jest dobry i powinien zadziałać, więc myślę że błędu trzeba gdzie indziej szukać!
piotrekk
mam ustawione error_raporting.

  1. <?php
  2. //1. sprawdzanie czy uzytkownik jest zareejstrowany ( spr. sesji)
  3. require_once "include/function.php";
  4. require_once "include/mysql.inc";
  5.  
  6. if (!isset($_SESSION["login"]) || !isset($_SESSION["loginIP"]) || ($_SESSION["loginIP"] != $_SERVER["REMOTE_ADDR"])) {
  7. unregisterLogin();
  8. header("Location : panelLogowanie.php");
  9. }
  10. else{
  11.  
  12. /*if (!autentycznoscSesji())
  13. {
  14.   unregisterLogin();
  15.   header("Location : panelLogowanie.php");
  16.   die;
  17. }*/
  18.  
  19. $format = strip_tags($_GET['format']);
  20. $ilosc = strip_tags($_GET['ilosc']);
  21. $kolor = strip_tags($_GET['kolor']);
  22. $cena = strip_tags($_GET['cena']);
  23. $login = $_SESSION['login'];
  24. if (!($connection = @mysql_connect($host, $dbLogin, $haslo)) || !mysql_select_db($baza, $connection)) 
  25. {
  26. die("Wystapił problem z połaczeniem z bazą danych, prosimy powiadomić o tym właś
    ciciela serwisun"
    );
  27. }
  28. $sql = mysql_query("SET names utf8", $connection);
  29. $query = "SELECT nazwa, adres, kod, nip, miasto FROM users WHERE login = '$login'";
  30.  
  31. $result = mysql_query($query, $connection);
  32.  
  33. $row = mysql_fetch_array($result);
  34.  
  35. $nazwa = $row["nazwa"];
  36. $adres = $row["adres"];
  37. $kod = $row["kod"];
  38. $nip = $row["nip"];
  39. $miasto = $row["miasto"];
  40. // nazwa sesji produktów
  41. $_SESSION["produkt"]["format"] = $format;
  42. $_SESSION["produkt"]["ilosc"] = $ilosc;
  43. $_SESSION["produkt"]["kolor"] = $kolor;
  44. $_SESSION["produkt"]["cena"] = $cena;
  45.  
  46. //sesja danych zamawiajacego
  47. $_SESSION["dane"]["nazwa"] = $nazwa;
  48. $_SESSION["dane"]["adres"] = $adres;
  49. $_SESSION["dane"]["kod"] = $kod;
  50. $_SESSION["dane"]["nip"] = $nip;
  51. $_SESSION["dane"]["miasto"] = $miasto;
  52.  
  53. ?>


niestety nie zwraca zadnych bledow.

jezeli ma Pan chwile to prosze napisac na gg: 1437604 wtedy dam Panu link do strony i bedzie mogl Pan sam rzucic na to okiem.
Cezar708
chodziło o wstawienie:

  1. <?php
  2. header("Location: panelLogowanie.php");
  3. ?>


zamiast

  1. <?php
  2. header("Location : panelLogowanie.php");
  3. ?>


(usunięta spacja po słowie Location)
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.