Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> logowanie + cookies
Legro
post
Post #1





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


na poczatku dodam ze szukalem pod logowanie + cookies ale nic

wiec sie pytam jak zrobic logowanie z uzyciem cookies? bo na sesjach nie chce robic bo nie rozumiem
Go to the top of the page
+Quote Post
strife
post
Post #2





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

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


Czego konkretnie nie rozumiesz? pytaj! (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Na cookies...
  1. <?php
  2.  
  3. if ( ! isset ( $_COOKIE['login'] ) )
  4. {
  5.    die('Nie masz uprawnien etc. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ');
  6. }
  7. else{
  8.  
  9.       // ... dalsze instrukcje jesli jest zalogowany
  10. }
  11.  
  12. ?>

Co do logowania, było już... nie wiem po co zakładasz tyle tych tematów, naucz się najpierw szukać!!!
Przykład z wykorzystaniem MySQL
  1. <?php
  2.  
  3. $query = mysql_query("SELECT * FROM uzytkownicy WHERE `user` = " . $_POST['user'] . "  ");
  4. $fetch = mysql_fetch_array($query);
  5. if ( $fetch ) // jesli user zostanie znaleziony w bazie
  6. {
  7.   if ( md5( $_POST['pass'] ) == $fetch['haslo'] ) // jesli haslo sie zgadza
  8.   {
  9.      echo 'logowanie zakonczone sukcesem';
  10.      // ... tutaj tez dodanie odpowiedniego ciastka
  11.      setcookie('login', '1', time()+3600);
  12.   }
  13.   else
  14.   {
  15.      echo 'Przykro mi, ale podane haslo jest bledne';
  16.    }
  17. }
  18. else
  19. {
  20.    echo 'Podany uzytkownik nie istnieje w bazie danych';
  21. }
  22.  
  23. ?>

Jeśli nie masz mysql, pomyśl - przerób...
poczytaj o setcookie" title="Zobacz w manualu php" target="_manual to sie dowiesz jak zrobic wylogowanie...

No i jeszcze jedno warto też rozbudować taki cały system logowania, dodać do ciasta hash i id user'a, aby nie mógł sobie dawać uprawnień.

Pozdrawiam!

BTW. Znowu Ci nie wierzę że szukałeś (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Co do sesji, jak szukałeś to zapewne ten temat Ci wogóle nie pomoże
http://forum.php.pl/index.php?showtopic=26921 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Kas
post
Post #3





Grupa: Zarejestrowani
Postów: 425
Pomógł: 0
Dołączył: 28.05.2005
Skąd: Warszawa

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


Możesz też robić prosty skrypt php bez bazy MySql i wykorzystać sesję.

---

Jak nie ruzmiesz - poczytaj manuala.
Na sesjach naprawdę łatwo.

Ten post edytował Kas 24.08.2005, 13:19:53
Go to the top of the page
+Quote Post
Legro
post
Post #4





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


no ale nie rozumiem tego naprawde... jak ktos by był łaskaw napisac do mnie na gg i wytłumaczyc mi te sesje (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) byłbym wdzieczny.. jak ktos jest zaint. to podam gg
Go to the top of the page
+Quote Post
strife
post
Post #5





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

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


  1. <?php
  2.  
  3. session_start(); // startujemy z sesja
  4.  
  5. if ( $_GET['akcja'] == 'add' )
  6. {
  7.  $_SESSION['test'] = 'Sesja Aktywna';
  8. }
  9.  
  10. var_export( $_SESSION ); // ... przegladanie teblicy
  11.  
  12. ?>

I teraz jeśli wpiszesz w przeglądarce ?akcja=add to zostanie dodana sesja, potem w innych swoich skryptach, stronach sprawdzasz czy dana sesja istnieje isset" title="Zobacz w manualu php" target="_manual jesli tak to dajesz dalej skrypt, jesli nie to inna akcja ( die ).
  1. <?php
  2.  
  3. if ( isset ( $_SESSION['test'] ) )
  4. {
  5.  //... gratulacje jestes zalogowany 
  6. }
  7. else{
  8.  
  9. // ... nie jestes zalogowany
  10. }
  11.  
  12. ?>


Sesje niszczysz przez session_destroy" title="Zobacz w manualu php" target="_manual. Co tu jest niezrozumiałe?

Więcej o sesjach w manualu => $_SESSION

Pozdro!
Go to the top of the page
+Quote Post
ens0re
post
Post #6





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 23.08.2005
Skąd: Warszawa

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


http://pl.php.net/manual/pl/ref.session.php <= tutaj masz chyba dość jasno wytłumaczone
Go to the top of the page
+Quote Post
gloin
post
Post #7





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 25.06.2005

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


1. przez url podajesz jakis sid (session id - moze byc phpowy albo Twoj wlasny)

i tak budujac link dodajesz do niego sid=$sid, np.
index.php?sid=asdf3243244gqgqwgq

  1. <?php
  2.  
  3.  
  4. $sid=false;
  5. $przekazany_sid = $_GET[sid];
  6.  
  7. if($przekazany_sid) {
  8.     if($_COOKIE[sid]==$przekazany_sid) {
  9.         $sid=$przekazany_sid;
  10.         setcookie('sid', $sid, time()+3600, '/'); // przedluzenie sesji
  11.     } else {
  12.         // sesja wygasla
  13.     }
  14. } else {
  15.     if($_POST[login]&&$_POST[password]) {
  16.         if('jan_kowalski'==$_POST[login]&&'12345678'==$_POST[password]) {
  17.             $sid = md5(date("Ymdhhii")); //utworzenie sid np. za pomoca funkcji md5(), ale to juz jak sobie tylko wymyslisz :)
  18.             setcookie('sid', $sid, time()+3600, '/');  // utworzenie sesji
  19.         } else {
  20.             // zle dane logowania
  21.         }
  22.     }
  23. }
  24.  
  25.  
  26. ?>


i teraz przy dostepie do zasobow objetych sesja sprawdzasz czy !$sid np.:

  1. <?php
  2.  
  3. if(!$sid) {
  4.     // np. jestem juz zalogowany do poczty
  5. } else {
  6.     // nie mam niestety uprawnien....;)
  7. }
  8.  
  9.  
  10. ?>



a usuniecie sesji wyglada tak:

  1. <?php
  2.  
  3.  
  4. if($wyloguj) {
  5. setcookie('sid', '', time()-3600, '/');
  6. $sid=false;
  7. }
  8.  
  9. ?>





no i tak to wyglada (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował gloin 24.08.2005, 14:10:36
Go to the top of the page
+Quote Post
Legro
post
Post #8





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


Cytat
BTW. Znowu Ci nie wierzę że szukałeś tongue.gif

Co do sesji, jak szukałeś to zapewne ten temat Ci wogóle nie pomoże
http://forum.php.pl/index.php?showtopic=26921 tongue.gif


a czytalem tylko jak dałem na poczatku start sesji to mi bład o headerach wysyłało i dałem jeszcze ob_start(); to tez bład wywa;lało i sie chcialem na ciacha przeniesc (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :D:D p.s nie musisz mi wierzyc (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

p.s dzieki wszystkim (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)


ale i tam nie rozumiem....








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

glin podaj mi twoj numer gg... ty ładnie tłumaczysz proszę...

Ten post edytował Legro 24.08.2005, 14:38:57
Go to the top of the page
+Quote Post
Ociu
post
Post #9





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Tworzysz sobie formularz i tak:
  1. <?php
  2. # Sprawdzamy, czy pola nie zostaly wyslane puste, jest tak, to konczymy.
  3. if(!empty($_POST['login']) && !empty($_POST['pass'])) die('Pola są puste');
  4.  
  5. # Sprawdzamy czy dane są poprawne (np. dane sa w pliku config.php)
  6. if($_POST['login'] == $login && $_POST['pass'] == $password)
  7. {
  8. #tworzymy ciacho
  9. setcookie('login', TRUE, time()+3600*24);
  10. }
  11.  
  12. ?>


Spradzamy czy cachio istnieje, jeśli tak, to user jest zalogowany
  1. <?php
  2. if(isset($_COOKIE['login'])) echo 'Jesteś zalogowany !';
  3. ?>


A teraz wylogowanie, czyli niszczymy ciastko
  1. <?php
  2. setcookie('login');
  3. ?>


To na tyle.

pozdrawiam
Go to the top of the page
+Quote Post
Legro
post
Post #10





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


zrobilem tak jak ociu napisał..

jak mam logowanie:

  1. <?php
  2.  
  3. // kod jeszcze tu mam
  4.  
  5. // jezeli hasla sa poprawne
  6. if ($haslo == $sql_haslo && $nick == $sql_nick)
  7. {
  8.  
  9.  // to mi tworzy ciacho
  10.  
  11. setcookie('log', TRUE, time()+3600*24);
  12.  
  13.  
  14.  // i pokazuje konunikat ze jestm zalogowany
  15. echo '<br><br>Jesteś zalogowany jako: '.$nick;
  16. }
  17. }
  18.  
  19. ?>


dałem w innym pliku :

  1. <?php
  2. if(isset($_COOKIE['log'])) {
  3.  
  4. include ("plik do includowania jak istnieje to ciacho");
  5.  
  6. }
  7. else {
  8.  
  9. // a jak nie to komunikat
  10. echo 'Musisz się zalogować aby przeglądać gify!';
  11. }
  12.  
  13.  
  14. ?>


no i loguje sie.. logowanie przebiegło pomyslnie wchodze na ta druga strone i : Musisz się zalogować aby przeglądać gify!
czemu sie me ciacho nie zapamietało?
Go to the top of the page
+Quote Post
strife
post
Post #11





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

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


Przeprowadź prosty debug, zobacz czy ten skrypt w momencie logowania tworzy Ci to ciacho, przejrzyj tablicę $_COOKIE ( np. var_export ).

W pierszym skrypcie masz błąd dwa razy } na końcu, ale rozumiem że to literówka.

Pozdrawiam!
Go to the top of the page
+Quote Post
Ociu
post
Post #12





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Spróbuj dać:
  1. <?php
  2. setcookie('log', 'in', time()+3600*24);
  3. ?>
Go to the top of the page
+Quote Post
Legro
post
Post #13





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


dałem i nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) napiszcie mi jakis na sesjach... proszę bardzo.. naprawde tego nie rozumiem.. prosze o napisanie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) ((IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
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%)
-----


Cytat
prosze o napisanie

100 PLN, przelew na konto (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ( joke ) wczoraj wieczorkiem nie miałem co robić więc sobie naskrobałem coś takiego tu masz sznurek...

http://dev.club.webhost.pl/source/Login.phps

Acha, narazie na serwerze nie mam dostępu do podglądania źródeł *.phps więc zmień sobie rozszerzenie na *.php i odpal, przejrzyj skrypt - może coś zrozumiesz..

Pozdrawiam!
Go to the top of the page
+Quote Post
Legro
post
Post #15





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


ehh (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) jeszcze gorszy mam metlik w glowie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) napisałes to na klasach i terz tym bardziej tego nie rozumiem (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) napiszcie mi ktos cos po ludzku normalnie proszę.. (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) albo niech mi ktos na gg napisze i mi to wytłumczy (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif) (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
Go to the top of the page
+Quote Post
strife
post
Post #16





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

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


Cytat(Legro @ 2005-08-25 18:18:19)
napiszcie mi ktos cos po ludzku normalnie proszę..

Ej, trochę dziwnie to zabrzmiało, czyli co ja nie pisze po ludzku, czy może pisanie na klasach jest nieludzkie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif)

Prosisz i prosisz, a nie pomyślałeś o tym aby kilka godzinek poczytać i posiedzieć przy kodowaniu, aż w końcu dojść do perfekcji, niż cały czas pisać te same tematy dotyczące logowania (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?

Mimo wszystko pozwolę sobie ten temat trochę rozwinąć, bo jak widzę coś o logowaniu na tym forum to już niedobrze mi się robi... tak więc od początku..

---

Zakładamy że masz sobie jakąś tam swoją bazę danych z użytkownikami i hasłami, w poniższym przykładzie użyje prostej tablicy, abyś zrozumiał cała zasadę - kolejny przykładowy skrypt:
  1. <?php
  2. session_start(); // Startujemy z sesja
  3.  
  4.  
  5. // Lista uzytkownikow...
  6.  
  7. $users = array(
  8.  'Kaczor' => 'Donald',
  9.  'Gremlin' => 'Kaczor'
  10.  );
  11. // Piersza wartosc to imie druga to haslo
  12.  
  13. // No to co? - Logujemy (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
  14.  
  15. if ( ! empty ( $_POST['name'] ) && ! empty ( $_POST['pass'] ) ) // jesli wyslano
  16. {
  17.  
  18. foreach( $users as $k => $u ) // petla (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
  19. {
  20.  
  21. if ( $k == $_POST['name'] ) // jesli zgadza sie imie z tym w bazie
  22. {
  23.  
  24. if ( $u == $_POST['pass'] ) // jesli zgadza sie haslo z tym w bazie dla danego usera
  25. {
  26.  
  27. $_SESSION['Login'] = $_POST['name']; // Logujemy
  28.  
  29. }
  30.  
  31. }
  32.  
  33.  
  34.  
  35. }
  36.  
  37.  
  38. }
  39.  
  40.  
  41. if ( ! $_SESSION['Login'] ) // jesli nie jestesmy zalogowani to...
  42. {
  43.  
  44. echo '<form method="post" action="?">';
  45. echo '<input type="text" name="name"> <br />';
  46. echo '<input type="password" name="pass"> <br />';
  47. echo '<input type="submit" value="Loguj">';
  48. echo '</form>';
  49.  
  50. }
  51. else{ // w przeciwnym wypadku...
  52.  
  53. echo 'Jestes zalogowany jako ' . $_SESSION['Login'] . '<br />';
  54. echo '<a href="?wyloguj=tak">Wyloguj</a>';
  55.  
  56. }
  57.  
  58. if ( $_GET['wyloguj'] == 'tak' ) // jesli sie wylogujemy to...
  59. {
  60.  
  61. header('Location: ?');
  62.  
  63. }
  64.  
  65. ?>


Jak zauważyłeś hasła nie są kodowane md5, jest to dosyć ważne więc skrypt logowania należało by zaopatrzyć właśnie w hashowanie, więcej na ten temat w manual'u => md5" title="Zobacz w manualu php" target="_manual, sha1" title="Zobacz w manualu php" target="_manual. O hashowaniu było tez dużo na forum więc poszukaj.

Zrobiłem dosyć dokładne komentarze w powyższym skrypcie, więc myślę że nie będziesz miał problemów z rozszyfrowaniem. Wszystko jest dosyć prosto napisane, jeśli masz jakieś wątpliwości pytania to pytaj, ale nie oczekuj gotowców - sam coś napisz.

Czy to jest dla Ciebie wszystko zrozumiałe?

Pozdrawiam Serdecznie!
Go to the top of the page
+Quote Post
Legro
post
Post #17





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


ok.. ale zapytam tylko skad sie wzieło w tym:

  1. <?php
  2. foreach( $users as $k => $u )
  3. ?>


te $k :/

$users to tabela z userami? i zamieniamy ja na $k

a $u to tak samo jak bym robił while?

np.

while($row=mysql_fetch_array($zapytanie));

$row['cos z bazy']

to te $row['cos z bazy']

to cos mniej wiecej to co te $u (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

jak tak to serdeczne dzieki
Go to the top of the page
+Quote Post
strife
post
Post #18





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

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


$k - to imię użytkownika w bazie, natomiast
$u - to jego hasło

Przykład
  1. <?php
  2.  
  3. $tablica = array( 'klucz1' => 'wartosc1' );
  4.  
  5. foreach( $tablica as $klucz => $wartosc )
  6. {
  7. echo 'Klucz =>' . $klucz . ' i wartosc =>' . $wartosc;
  8. }
  9.  
  10. ?>


Poczytaj o foreach" title="Zobacz w manualu php" target="_manual i poćwicz. Dalej jeśli chcesz to zrobić na mysql to nie ma sensu wczytywać do zmiennej całej tablicy, lepiej użyć takiego kodu.

Przykład 2
  1. <?php
  2.  
  3. $query = mysql_query("SELECT * FROM uzytkownicy WHERE `user` = " . $_POST['name'] . " "); // ...
  4. $fetch = mysql_fetch_array($query);
  5. if ( $fetch ) // jesli user zostanie znaleziony w bazie
  6. {
  7. if ( $_POST['pass'] == $fetch['haslo'] ) // jesli haslo sie zgadza
  8. {
  9.  $_SESSION['Login'] = $_POST['name'];
  10. }
  11. else
  12. {
  13.  echo 'Przykro mi, ale podane haslo jest bledne';
  14.  }
  15. }
  16. else
  17. {
  18.  echo 'Podany uzytkownik nie istnieje w bazie danych';
  19. }
  20.  
  21. ?>


A to dlatego, jeśli miałbyś 700 użytkowników i za każdym razem logowania musiałbyś wczytywać ich wszystkich do pamięci to przy większej ilości odwiedzin skrypt by Ci zaczął zwalniać. Dlatego lepszym rozwiązaniem jest to wyżej niż zwykłe bez mysql, trzymać userów w tablicy.

Pozdrawiam!
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 - 21:35