Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: logowanie + cookies
Forum PHP.pl > Forum > Przedszkole
Legro
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
strife
Czego konkretnie nie rozumiesz? pytaj! tongue.gif
Na cookies...
  1. <?php
  2.  
  3. if ( ! isset ( $_COOKIE['login'] ) )
  4. {
  5.    die('Nie masz uprawnien etc. 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ś 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
Kas
Możesz też robić prosty skrypt php bez bazy MySql i wykorzystać sesję.

---

Jak nie ruzmiesz - poczytaj manuala.
Na sesjach naprawdę łatwo.
Legro
no ale nie rozumiem tego naprawde... jak ktos by był łaskaw napisac do mnie na gg i wytłumaczyc mi te sesje tongue.gif byłbym wdzieczny.. jak ktos jest zaint. to podam gg
strife
  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!
ens0re
http://pl.php.net/manual/pl/ref.session.php <= tutaj masz chyba dość jasno wytłumaczone
gloin
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 winksmiley.jpg
Legro
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 biggrin.gif:D:D p.s nie musisz mi wierzyc tongue.gif

p.s dzieki wszystkim winksmiley.jpg


ale i tam nie rozumiem....








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

glin podaj mi twoj numer gg... ty ładnie tłumaczysz proszę...
Ociu
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
Legro
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?
strife
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!
Ociu
Spróbuj dać:
  1. <?php
  2. setcookie('log', 'in', time()+3600*24);
  3. ?>
Legro
dałem i nie działa sad.gifsad.gifsad.gif napiszcie mi jakis na sesjach... proszę bardzo.. naprawde tego nie rozumiem.. prosze o napisanie sad.gif(sad.gifsad.gif
strife
Cytat
prosze o napisanie

100 PLN, przelew na konto 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!
Legro
ehh sad.gif jeszcze gorszy mam metlik w glowie sad.gifsad.gifsad.gif napisałes to na klasach i terz tym bardziej tego nie rozumiem sad.gifsad.gifsad.gif napiszcie mi ktos cos po ludzku normalnie proszę.. sad.gif sad.gif albo niech mi ktos na gg napisze i mi to wytłumczy sadsmiley02.gif sadsmiley02.gif
strife
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 questionmark.gif? 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 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 biggrin.gif
  14.  
  15. if ( ! empty ( $_POST['name'] ) && ! empty ( $_POST['pass'] ) ) // jesli wyslano
  16. {
  17.  
  18. foreach( $users as $k => $u ) // petla 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!
Legro
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 questionmark.gif

jak tak to serdeczne dzieki
strife
$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!
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.