Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmiana stanu sesji na stronie
mr_aaa
post 4.04.2011, 20:29:51
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 22.09.2009

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


Witam,

tworzę sobie swój własny system logowania i wylogowywania użytkowników.

Mam pewien problem - gdy dany użytkownik wpisze swoje dane i kliknie 'zaloguj' i dajmy na to wykona się:
  1. $_SESSION['zalogowany']=1;
  2. $_SESSION['uzytkownik']=$user['id'];

Po czym strona się przeładuje i jak sobie dam np. var_dump($_SESSION) na samym początku strony to stan ten zmiennej jest null, a dalej gdzieś w kodzie jest tak jak powinno być.

Jak powinienem sprawdzać stan sesji, czy też jak powinienem wywoływać funkcje by wszystko było ok?

EDIT: Jak się wylogowuje to jest analogicznie - zmiany z session_destroy nie są widoczne np. na początku strony

Ten post edytował mr_aaa 4.04.2011, 20:31:04
Go to the top of the page
+Quote Post
ADeM
post 4.04.2011, 21:17:07
Post #2





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


Masz na początku każdego pliku rozpoczętą sesję?


--------------------
Go to the top of the page
+Quote Post
mr_aaa
post 4.04.2011, 21:24:09
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 22.09.2009

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


tak,
generalnie robię to na jednym pliku i jak sobie czytam, to widzę że generalnie stosowana jest zasada, że logowanie ma swój plik, wylogowywanie swój. Ja to robiłem wszystko tylko na index.php, gdzie logowanie czy wylogowywanie było zmienną w $_GET. Czy to się generalnie stosuje? Być może bardziej logiczne jest stosowanie osobnych plików?
Go to the top of the page
+Quote Post
ADeM
post 4.04.2011, 21:32:07
Post #4





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


Może pokaż lepiej kod?


--------------------
Go to the top of the page
+Quote Post
mr_aaa
post 4.04.2011, 21:41:02
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 22.09.2009

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


funkcja sprawdzająca czy wyświetlać przycisk zaloguj czy wyloguj (tu właśnie problem, że źle się pokazują-np zaraz po wylogowaniu jest nadal przycisk do wylogowania):
  1. function LoggedButton(){
  2. if($this->IsLoggedIn() ){
  3. echo '<a href="/wyloguj">wyloguj</a>';
  4. }
  5. else{
  6. echo '<a href="/logowanie">logowanie</a>';
  7. }
  8. }


kod logowania:

  1. $login=$_POST['login'];
  2. $password=sha1($_POST['password']);
  3. $query="Select * from uzytkownicy where mail=:login and haslo=:password and checksum='1'";
  4. $stmt=$this->pdo->prepare($query);
  5. $stmt->bindValue(':login', $login);
  6. $stmt->bindValue(':password', $password);
  7. $stmt->execute();
  8. $user=$stmt->fetch();
  9. if($user){
  10. $_SESSION['zalogowany']=1;
  11. $login=$user['id'];
  12. $_SESSION['uzytkownik']=$login;
  13. $id=$user['id'];
  14. $date = date("y-m-d, G:i:s");
  15. $query="Update uzytkownicy set last_visited='$date' where id='$id'";
  16. $stmt=$this->pdo->prepare($query);
  17. $this->Komunikat('Zalogowano');
  18. return $user;
  19. }


Na początku index.php oczywiście session_start();

funkcja wylogowania:
  1. function Logout(){
  2. unset($_SESSION['uzytkownik']);
  3. unset($_SESSION['zalogowany']);
  4. $this->Komunikat('Zostałeś/aś poprawnie wylogowany/a.');
  5. }
Go to the top of the page
+Quote Post
ADeM
post 4.04.2011, 21:54:27
Post #6





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


Nie pokazałeś zbyt dużo... Mówiąc prawdę, to najważniejsze usunąłeś.
Prawdopodobnie błąd jest taki, że w złym miejscu wylogowujesz ;-)


--------------------
Go to the top of the page
+Quote Post
mr_aaa
post 4.04.2011, 22:02:42
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 22.09.2009

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


Pewnie masz rację. Jednak jak to zrobić by było dobrze? Mam klasę User gdzie mam funkcję do wylogowania i jak tą funkcję wywołać na początku strony po kliknięciu przycisku wyloguj?
Go to the top of the page
+Quote Post
ADeM
post 4.04.2011, 22:31:23
Post #8





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


Tak samo jak dalej, tylko że na początku.
Jak już Ci wcześniej powiedziałem: podaj kod. Tak, to sobię możemy tylko gdybać co, gdzie i jak...


--------------------
Go to the top of the page
+Quote Post
mr_aaa
post 4.04.2011, 22:43:13
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 22.09.2009

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


tylko którą część kodu? bo nie wiem co tu może być jeszcze bardziej istotne?
Go to the top of the page
+Quote Post
ADeM
post 4.04.2011, 23:09:22
Post #10





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


Miejsca, w których działasz na sesjach ;-)
Ewentualnie cały plik.


--------------------
Go to the top of the page
+Quote Post
mr_aaa
post 4.04.2011, 23:20:48
Post #11





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 22.09.2009

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


Tworzę sesje przy logowaniu:
  1. function UserLogin(){
  2. if($_SESSION['zalogowany']==1){
  3. $this->Komunikat('Jesteś już zalogowany/a.');
  4. }
  5. else{
  6. if(!isset($_POST['submit']) ){
  7. require_once('Page/zalogujform.method.php');
  8. }
  9. elseif(isset($_POST['submit']) ){
  10. $login=$_POST['login'];
  11. $password=sha1($_POST['password']);
  12. $query="Select * from uzytkownicy where mail=:login and haslo=:password and checksum='1'";
  13. $stmt=$this->pdo->prepare($query);
  14. $stmt->bindValue(':login', $login);
  15. $stmt->bindValue(':password', $password);
  16. $stmt->execute();
  17. $user=$stmt->fetch();
  18. if($user){
  19. $_SESSION['zalogowany']=1;
  20. $login=$user['id'];
  21. $_SESSION['uzytkownik']=$login;
  22. $id=$user['id'];
  23. $date = date("y-m-d, G:i:s");
  24. $query="Update uzytkownicy set last_visited='$date' where id='$id'";
  25. $stmt=$this->pdo->prepare($query);
  26. $this->Komunikat('Zalogowano');
  27. return $user;
  28. }
  29. else{
  30. $this->Komunikat('Wpisane dane są nieprawidłowe.');
  31. require_once('Page/zalogujform.method.php');
  32. return false;
  33. }
  34. }
  35. }
  36. }


Usuwam przy wylogowaniu:
  1. function Logout(){
  2. unset($_SESSION['uzytkownik']);
  3. unset($_SESSION['zalogowany']);
  4. $this->Komunikat('Zostałeś/aś poprawnie wylogowany/a.');
  5. }

W index.php jest session_start();

I tyle. Ale skoro chciałbyś więcej kodu, to domyślam się, że gdzieś czegoś nie robię?
Go to the top of the page
+Quote Post
ADeM
post 5.04.2011, 18:54:27
Post #12





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


To wszystko co mi podajesz, to tylko metody. Pokaż jak tego wszystkiego używasz...


--------------------
Go to the top of the page
+Quote Post
Fifi209
post 5.04.2011, 20:28:36
Post #13





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Klasa pisana jest chyba po przeczytaniu "Obiektowy PHP4", tak to wygląda, choćby ze względu na brak modyfikatorów dostępu.

Czepię się również bazy i skryptu, dokładniej:
  1. $date = date("y-m-d, G:i:s");
  2. $query="Update uzytkownicy set last_visited='$date' where id='$id'";

Znasz taki typ danych jak DATETIME ?!

Jeżeli tak bardzo chcesz korzystać z dobrodziejstw PDO to rób to wszędzie, bo póki co raz bindujesz parametry a raz wrzucasz do stringa w najgorszy z możliwych sposobów.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 13:09