Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z autentycznoscia sesji
piotrekk
post
Post #1





Grupa: Zarejestrowani
Postów: 123
Pomógł: 2
Dołączył: 13.11.2006

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


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 !
Go to the top of the page
+Quote Post
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


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 (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif) ...
Go to the top of the page
+Quote Post
piotrekk
post
Post #3





Grupa: Zarejestrowani
Postów: 123
Pomógł: 2
Dołączył: 13.11.2006

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


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
Go to the top of the page
+Quote Post
Cezar708
post
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
piotrekk
post
Post #5





Grupa: Zarejestrowani
Postów: 123
Pomógł: 2
Dołączył: 13.11.2006

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


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. ?>
Go to the top of the page
+Quote Post
Cezar708
post
Post #6





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
piotrekk
post
Post #7





Grupa: Zarejestrowani
Postów: 123
Pomógł: 2
Dołączył: 13.11.2006

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


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.

Ten post edytował piotrekk 6.08.2007, 10:05:15
Go to the top of the page
+Quote Post
Cezar708
post
Post #8





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


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ć!
Go to the top of the page
+Quote Post
piotrekk
post
Post #9





Grupa: Zarejestrowani
Postów: 123
Pomógł: 2
Dołączył: 13.11.2006

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


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.

Ten post edytował piotrekk 6.08.2007, 12:28:19
Go to the top of the page
+Quote Post
Cezar708
post
Post #10





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


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)
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: 22.08.2025 - 14:33