Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]problem z cookie i session
Forum PHP.pl > Forum > Przedszkole
1ukas
Hej,
pisze skrypt, w ktorym bede potrzebowal autoryzacji uzytkownia. Autoryzacja ma sie odbywac na takiej zasadzie:
czesc do logowania:
- uzytkownik wpisuje do formularza login i haslo, ktorym loguje sie do domeny
- dane z formularza sprawdzane sa na kolejnej stronie przez skrypt, ktory sprawdza, czy uzytkownik znajduje sie w bazie
- jesli tak, to skrypt probuje polaczyc sie z serwerem ldap i zautoryzowac uzytkownikiem i haslem z formularza
- jesli autoryzacja przebiegla pomyslnie, to skrypt generuje Cookie, lub inicjuje sesje
strona dostepna po zalogowaniu
- skrypt sprawdza czy istnieje cookie
- skrypt sprawdza czy user z cookisa jest w bazie danych i jesli tak, to strona sie wyswietla
- jesli nie, to user jest przekierowywany na strone logowania

Probowalem z cookisami i sesja i w kazdym przypadku jest tak samo.
Wszystko dziala ok, ale tylko za pierwszym razem. Gdy tylko odswieze strone, uzytkownik nie jest juz zautoryzowany i system przekierowuje mnie na strone logowania. Czy wie ktos moze co robie zle? A moze jest jakas inna opcja na autoryzacje uzytkownikow...

Zalaczam moj kod:
adlogin.php:
  1. <form name="form1" method="post" action="ldap.php">
  2. <table>
  3. <tr>
  4. <th colspan="2"><div align="center">User login - Please Login</div></th>
  5. </tr>
  6. <tr>
  7. <td width="76">Username</td>
  8. <td width="324"><input type="text" name="username" id="username" ></td>
  9. </tr>
  10. <tr>
  11. <td>Password</td>
  12. <td><input type="password" name="password" id="password" ></td>
  13. </tr>
  14. <tr>
  15. <td colspan="2"><input type="submit" name="Submit" id="Submit" value="Submit"></td>
  16. </tr>
  17. </table>
  18. </form>


ldap.php:
  1. <?php
  2. $ldapusr = $_POST['username']; // ldap rdn or dn
  3. $ldappass = $_POST['password']; // associated password
  4. require_once ('dbdetails.cfg');
  5. $con = mysql_connect($dbHost, $dbUser, $dbPass);
  6. if (!$con)
  7. {
  8. die('Could not connect: ' . mysql_error());
  9. }
  10. mysql_select_db($dbName, $con);
  11. //retrieve data from database
  12. $query = "SELECT usr_username FROM users WHERE usr_username= '".$ldapusr."'";
  13. $result = mysql_query($query);
  14. $row = mysql_fetch_assoc( $result );
  15. $findrow = $row['usr_username'];
  16. echo $row['usr_username'];
  17.  
  18. // using ldap bind
  19. if ($ldapusr==$findrow && $ldappass!='')
  20. {
  21. $ldaprdn = $_POST['username'] . "@company";
  22.  
  23. // connect to ldap server
  24. $ldapconn = ldap_connect("192.168.100.10") or
  25. die("Couldn't connect to AD! Please check your server details");
  26.  
  27. if ($ldapconn) {
  28.  
  29. // binding to ldap server
  30. $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
  31. // verify binding
  32. if ($ldapbind) {
  33. // if successful
  34. // setup cookies
  35. setcookie('username', $_POST['username'], time()+60*60*24*365);
  36. header('Location: main.php');
  37. //echo "LDAP bind successful...";
  38. echo "You are logged in as: " .$ldapusr . " | Logout";
  39. } else {
  40. echo "Couldn't bind to AD! Please check your username and/or password";
  41. }
  42.  
  43. }
  44. }
  45.  
  46. else
  47. {echo "Wrong username and/or password or this username is not allowed to acces this website.";}
  48. ?>


main.php:
  1.  
  2. <?php
  3. //logout
  4. function logout() {
  5. setcookie('username', '', time()-60*60*24*365);
  6. }
  7.  
  8. echo $_COOKIE['username'];
  9. if (isset($_COOKIE['username'])) {
  10. $ldapusr = $_COOKIE['username']; // ldap rdn or dn
  11. require_once ('dbdetails.cfg');
  12. $con = mysql_connect($dbHost, $dbUser, $dbPass);
  13. if (!$con)
  14. {
  15. die('Could not connect: ' . mysql_error());
  16. }
  17.  
  18. mysql_select_db($dbName, $con);
  19.  
  20. //retrieve data from database
  21. $query = "SELECT usr_username FROM users WHERE usr_username= '".$ldapusr."'";
  22. $result = mysql_query($query);
  23. $row = mysql_fetch_assoc( $result );
  24. $findrow = $row['usr_username'];
  25. //echo $row['usr_username'];
  26.  
  27. //concatenate the proper username:
  28. if ($ldapusr==$findrow)
  29. {
  30. echo '<div id="header">';
  31. echo '<div align="right" style="width:99%">You are logged in as:' . $_COOKIE['username'] .' | <strong><a href= "'. logout() .'">Logout</a></strong></div>
  32.  
  33. </div>
  34. ';
  35.  
  36. //}
  37.  
  38. }
  39. else {
  40. echo $_COOKIE['username'];
  41. header('Location: adlogin.php');
  42. }}
  43.  
  44. else {
  45. echo $_COOKIE['username'];
  46. header('Location: adlogin.php');
  47. }
  48.  
  49. //content goes here
  50.  
  51. ?>
hieroshima
Jak już znajdzie użytkownika który się loguje powinieneś utworzyć i sesje i cookies ponadto na samym poczatku dokumentu tam gdzie będziesz uzywał sesji musisz umieścic

Kod
session_start()


i musi być to w każdym pliku, który jest dostepny tylko dla zalogowanych lub tam gdzie będziesz używał danych z sesji, ponadto dobrze by było gdyby na początku logowania po starcie sesji sprawdzał czy sesja istnieje, jak nie to żeby probował po ciasteczkach. Dobiero gdy oba warunki zwracają false powinien przekierować do logowania.

coś takiego:
Kod
if (!isset($_SESSION['username'])) {
    if (isset($_COOKIE['username'])) {
      $_SESSION['username'] = $_COOKIE['username'];
    }
  }
1ukas
Dzieki za informacje, zaraz sprobuje pozmieniac kod.
Mam jeszcze jedno pytanie:
Czy na stronie dostepnej po zalagowaniu mam porownywac wartosc z cookie'sa lub sesji z nazwa uzytkownika w bazie, czy tylko sprawdzic czy istnieje cookies username?
hieroshima
cookie zostanie utworzone tylko wtedy kiedy przy logowaniu użytkownik istnieje w bazie i hasło pasuje do użytkownika tylko wtedy utworzy się ciastko i sesja więc nie ma już potrzeby łączenia się jeszcze raz z bazą i sprawdzania
1ukas
Juz wszystko dziala.
Wrzucam poprawiony kod, moze komus sie przyda:

  1. <?php
  2. //logout
  3. //echo "$_GET";
  4.  
  5. if(!empty($_GET))
  6. {
  7. $iflogout = $_GET['logout'];
  8. echo $iflogout;
  9. //if ($iflogout==1)
  10. //{
  11. logout();
  12. //}
  13. }
  14. function logout() {
  15. //setcookie('username', '', time()-60*60*24*365);
  16. setcookie('username', $_COOKIE['username'], time()-60*60*24*365);
  17. header('Location: main.php');
  18. };
  19.  
  20. if(!isset($_SESSION['username'])) session_start();
  21.  
  22. if (!isset($_SESSION['username'])) {
  23. if (isset($_COOKIE['username'])) {
  24. $_SESSION['username'] = $_COOKIE['username'];
  25. }
  26. }
  27. //echo $_COOKIE['username'];
  28. if(isset($_SESSION['username']))
  29. {
  30. echo '<div id="header">';
  31. echo '<div align="right" style="width:99%">You are logged in as:' . $_SESSION['username'] .' | <strong><a href= "main.php?logout=1">Logout</a></strong></div>
  32.  
  33. </div>
  34. ';


Dzieki za pomoc. Pozdrowienia smile.gif
hieroshima
nie ma za co pozdro wink.gif
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.