Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Logowanie, sesje.
MagnuM
post
Post #1





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


Witam,

ja się wiążę z takim problemem że mam zrobione logowanie na stronie na sesjach. Użytkownik wpisuje login, hasło, te dane przechodzą do funkcji logowania, w tej funkcji pobierane są odpowiednie dane z bazy i jeżeli jest odpowedni login i hasło do niego to następuje taka jakby autoryzacja - tzn. zmienna $_SESSION["USER_AUTH"] przybiera wartość true, później zmienna $_SESSION["USER_LOGIN"] przybiera wartość loginu danego użytkownika. I teraz użytkownik widzi na ekranie link który przekierowuje go do pewnej podstrony, na której to wywoływana jest funkcja która na podstawie tej zmiennej $_SESSION["USER_LOGIN"] pobiera z bazy resztę danych. Jak wiadomo takie rozwiązanie, że użytkownik musi indywidualnie kliknąć na link za bardzo mu nie sprzyja. Więc zdecydowałem się na przekierowanie - tzn:

Kod
<meta http-equiv="Refresh" content="0; URL=index.php?page=siedziba">


Problem jest tego typu że na ie u mnie wszystko działa w pożądku(ie z sp2). Znajomi mówią jednak że u nich na ie poprzez to przekierowanie logowanie nie jest przeprowadzane poprawnie (to jest ie z sp1). Poprzez zwykły link do tej strony wszystko działa w pożądku.

Z moich obserwacji wynika że poprzez przekierowanie nie są przekazywane zmienne globalne na niektórych wersjach przeglądarek. Czy jest na to jakaś rada?

Pozdrawiam.


--------------------
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
who?
post
Post #2





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 4.05.2005

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


Hej,
Ja zawsze korzystam z takiego przekierowania w php:

Kod
header ("Location: www.costam.pl");
exit;


Niestety musi być na samym początku strony... to znacz musi zostać wykonane przed jakimkolwiek wysłaniem danych do przeglarki.

POZDRAWIAM
who?
Go to the top of the page
+Quote Post
TomASS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat
Niestety musi być na samym początku strony... to znacz musi zostać wykonane przed jakimkolwiek wysłaniem danych do przeglarki.


Dlaczego niestety? smile.gif Przecierz jak masz zamiar odrazu (automatycznie) gdzieś skoczyć, to nie interesuje Cię co wyświeli przeglądarka tongue.gif


Ja mam to robione w ten sposób, że w skrypcie logowania mam (gdy użytkownik się autoryzuje), zapytanie, które wybiera z bazy danych na jaką stronę przeglądarka ma się przekierować:
  1. <?php
  2.  
  3. header("Location: ".$USER['Strona']);
  4.  
  5. ?>


gdzie $USER['Strona']) to strona na którą należy przekierować danego użytkownika.


--------------------
Go to the top of the page
+Quote Post
MagnuM
post
Post #4





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


Problem w tym że ja musze wysłać te zmienne do przeglądarki :/


--------------------
Go to the top of the page
+Quote Post
TomASS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Jakie zmienne? Trzymaj je w sesjach.


--------------------
Go to the top of the page
+Quote Post
revyag
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


  1. <?php
  2. header("Location: ".$USER['Strona'].SID);
  3. ?>


--------------------
-------------

------
Go to the top of the page
+Quote Post
MagnuM
post
Post #7





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


ok, no więc strona logowania wygląda następująco:

  1. <?
  2.  
  3. $user = strip_tags($_POST['nick']);
  4. $pass = strip_tags($_POST['haslo']);
  5.  
  6. if(login($user, $pass))
  7. {
  8. header("Location: index.php?page=siedziba". SESID);
  9. echo("aaa");
  10. }
  11. ?>


Ale header nie działa :/


--------------------
Go to the top of the page
+Quote Post
who?
post
Post #8





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 4.05.2005

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


Cytat(MagnuM @ 2005-09-28 16:54:49)
Ale header nie działa :/

Zapomniałeś o "exit;" na końcu.

POZDRAWIAM,
who?
Go to the top of the page
+Quote Post
MagnuM
post
Post #9





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


No więc header dalej nie działa, po wielu dziwnych próbach.

W wiązku z tym zacząłem próbować z javascriptem.

Mam takie pytanie. Czy instrukcja location.reload(); koniecznie musi pokazywać jakieś dziwne komunikaty przy wywołaniu? Nie może się odrazu wywoływać odswiezenie? Jest na to jakoś sposób?


--------------------
Go to the top of the page
+Quote Post
TomASS
post
Post #10





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat(who? @ 2005-09-28 20:38:04)
Cytat(MagnuM @ 2005-09-28 16:54:49)
Ale header nie działa :/

Zapomniałeś o "exit;" na końcu.

POZDRAWIAM,
who?

Wcale nie musi być exit, ale za to powinno być na samym początkusession_start().

Czy to na pewno cały kod?

Co do location.reload(); to zapewne wyświetla się okienko, że strona wygasła, jest to spowodowane tym, że wracasz do strony do której dane zostały wysłane metodą POST, może jak byś spróbował GETem to by pomogło?


--------------------
Go to the top of the page
+Quote Post
MagnuM
post
Post #11





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


Kiepska sprawa przekazywać login i hasło w URL-u :/ A ja dalej nie mogę soie poradzić.


--------------------
Go to the top of the page
+Quote Post
revyag
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


Nie tak:
  1. <?php
  2. header("Location: index.php?page=siedziba". SESID);
  3. ?>

tylko tak:
  1. <?php
  2. header("Location: index.php?page=siedziba&amp;". SESID);
  3. ?>

to zasadnicza różnica jednego ampersanda snitch.gif


--------------------
-------------

------
Go to the top of the page
+Quote Post
MagnuM
post
Post #13





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


Skoro żaden ze sposobów tu wymienionych nie przyniósł zamierzonego skutku, opiszę sprawę dokładniej.

index.php

pliczek w którym jest wywoływana funkcja session_start(), tu includowane są wszelkie pliki: pliki z funkcjami, lewe menu, prawe oraz środek(który jest zamienny, zaleznie od $_GET['page']).

login.php

formularz do logowania

login2.php

plik w którym wywoływana jest funkcja logowania

funkcja logowania

najpierw sprawdzane są wszystkie warunki, czy login pasuje do hasła i inne pierdoły, jeżeli wszystkie warunki są spełnione to dochodzi do logowania i wtedy wywoływany jest następujący kod:

  1. $_SESSION["USER_AUTH"]  = True;
  2. $_SESSION["USER_LOGIN"] = $sqlUser;
  3.  
  4. $log = date("Y-m-d");
  5. mysql_query("UPDATE user SET log='$log' WHERE login='$sqlUser'");
  6.  
  7. echo ("<p><center>Witaj <b>$nick</b></center>");
  8. echo ("<p><center><a href="index.php?page=siedziba&".SESID."">KLIK!</a><p>Trwa przekierowanie!</center>");
  9.  
  10. ?>
  11. <meta http-equiv="Refresh" content="0; URL=index.php?page=siedziba&<? echo (SESID) ?>">
  12. <?


Jak widać w tym miejscu następuje przekierowanie do index.php, ze srodkiem siedziba.php. W tym czasie w index.php wywoływana jest funkcja user_dane(), która na podstawie zmiennej $_SESSION["USER_LOGIN"] pobiera z bazy wszystkie dane dotyczące danego użytkownika. Później includowana jest ta strona siedziba.php która wyświetla te dane odrazu.


Problem jest tego typu że na moim komputerze działa to znakomicie. Normalnie się loguję wypełniając formularz, pokazuje mi się informacja że trwa przekierowanie i za chwile pojawia mi się strona siedziba.php z danymi dotyczącymi mojego konta. U moich znajomych zaś występuje problem taki, jakby nie wykonywana była funkcja user_dane(). Dane nie są poprawnie wyświetlane na stronie :/ Czyli drogą dedukcji możliwe że zmienna $_SESSION["USER_LOGIN"] nie jest przesyłana pomiędzy stronami. Problem rozwiązuje się jeżeli ręcznie klikną na link przekierowujący do tej strony, a nie będą czekać na przekierowanie.

Ma ktoś jakiś pomysł?

Ten post edytował MagnuM 1.10.2005, 13:32:17


--------------------
Go to the top of the page
+Quote Post
strife
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


Witam,

Wydaje mi się że na stronie logowania nie masz session_start" title="Zobacz w manualu php" target="_manual dlatego nie jest przekazywana dalej zmienna sesyjna. Jeśli myślisz że ta zmienna nie jest przekazywana zrób mały debug, na końcu umieść np.
  1. <?php
  2.  
  3. var_export($_SESSION);
  4.  
  5. ?>

I zobacz czy jest.. Natomiast jeśli nie działa Ci header" title="Zobacz w manualu php" target="_manual i nie wyskakuje Ci żaden błąd to myślę że masz wyłączone raportowanie błędów. error_reporting" title="Zobacz w manualu php" target="_manual

Pozdrawiam!


--------------------
Go to the top of the page
+Quote Post
MagnuM
post
Post #15





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


Dodałem wszędzie session_start i problem jest u innych, a u mnie działa prawidłowo sad.gif U mnie przekierowanie i wejscie poprzez link działają, a u znajomych działa tylko wejscie poprzez link. Podczas przekierowania tak jakby te zmienne sesyjne gdzieś uciekały :/


--------------------
Go to the top of the page
+Quote Post
s_w_ir
post
Post #16





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


Chwila. Skrypt testujesz na swoim kompie, prawda? Ale Twoi znajomi też wchodzą na Twój komp jako na serwer, czy wysyłasz skrypty na jakiś hosting?
Go to the top of the page
+Quote Post
MagnuM
post
Post #17





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


Wysyłam na serwer.


--------------------
Go to the top of the page
+Quote Post
s_w_ir
post
Post #18





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


No i wchodziłeś na ten server żeby sprawdzić czy to dziala, czy tylko u siebie na kompie sprawdzasz?
Go to the top of the page
+Quote Post
MagnuM
post
Post #19





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


Jasne ze na ten serwer ;-)


--------------------
Go to the top of the page
+Quote Post
Arrow
post
Post #20





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 5.05.2003

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


witam,

moze oni maja jakies specyficzne ustawienia zabezpieczen ?

  1. <?php
  2.  
  3. if ($password === $pass) {
  4.  
  5. $_SESSION['zalogowany'] = true;
  6.  }
  7. else {
  8. $_SESSION['zalogowany'] = false;
  9.  }
  10.  
  11. ?>


inne pliki sprawdzaja pozniej wartosc tej zmiennej i to wszytsko, dziala wszedzie


--------------------
Pozdrawiam Bartosz
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 17:56