Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Skrypt logowani
Forum PHP.pl > Forum > Przedszkole
in5ane
Elo, mam skrypt logowania no i jest problem, w tym ze jak sie zaloguje i odswieze strone, badz przejde na inna podstrone, to mnie wylogowuje. Moze pokaze kod i bedzie jasniej. Prosze o pomoc winksmiley.jpg

config.php:
  1. <?php
  2. if(!isset($_SESSION['sesja'])) {
  3. $_SESSION['sesja'] = '';
  4. }
  5.  
  6. if(eregi("config.php",$_SERVER['PHP_SELF']) OR eregi("config.php",$_SERVER['QUERY_STRING'])) 
  7. { header("Location: /"); die(); }
  8.  
  9. $_CONFIG['kxc'] = "a523d703f908dd69e02db64ec35d07315f4c49ab3cacad14a97304b02f2fbb09";
  10.  
  11. $_CONFIG['MySQL']['host'] = "localhost";
  12. $_CONFIG['MySQL']['user'] = "webporn_webporn";
  13. $_CONFIG['MySQL']['pass'] = "1231231231312312312312312312313123";
  14. $_CONFIG['MySQL']['base'] = "webporn_webporn";
  15.  
  16. @mysql_connect($_CONFIG['MySQL']['host'], $_CONFIG['MySQL']['user'], $_CONFIG['MySQL']['pass']);
  17.  
  18. @mysql_select_db($_CONFIG['MySQL']['base']);
  19.  
  20. function login() {
  21. global $_CONFIG;
  22. $zalogowany = false;
  23.  
  24. if(isset($_COOKIE["dane"])) {
  25. $dane = $_COOKIE["dane"]^$_CONFIG['kxc'];
  26. $login = substr($dane, 0, 32);
  27. $haslo = substr($dane, -32);
  28. $metod = "cookies";
  29. }
  30. elseif(isset($_SESSION['login']) AND isset($_SESSION['haslo'])) {
  31. $login = $_SESSION['login'];
  32. $haslo = $_SESSION['haslo'];
  33. $metod = "session";
  34. }
  35. elseif(isset($_POST['login']) AND isset($_POST['haslo'])) {
  36. $login = mysql_real_escape_string(strip_tags($_POST['login']));
  37. $haslo = md5(mysql_real_escape_string(strip_tags($_POST['haslo'])));
  38. $metod = "post";
  39. }
  40.  
  41. if(isset($metod)) {
  42. $query = mysql_query("SELECT * FROM `users` WHERE `nick`='".$login."' AND `pass`='".$haslo."';");
  43. if(mysql_num_rows($query) == 1) {
  44. $zalogowany = true; 
  45. if($metod <> "session") {
  46. $wiersz = mysql_fetch_array($query);
  47. $_SESSION['login'] = $wiersz['nick'];
  48. $_SESSION['haslo'] = $wiersz['pass'];
  49.  if($metod == "post" AND isset($_POST['pamietaj']) AND $_POST['pamietaj'] == "ok") {
  50.  $dane = ($login.$haslo)^$_CONFIG['kxc'];
  51.  setcookie ("dane", $dane,time()+3600*24*365);
  52.  }
  53. }
  54.  }
  55. }
  56. return $zalogowany;
  57. }
  58.  
  59. function logout() {
  60. if(isset($_COOKIE["dane"])) 
  61. setcookie ("dane", "",time()-3600*24*365);
  62. unset($_SESSION['login']);
  63. unset($_SESSION['haslo']);
  64. unset($_SESSION['nick']);
  65. }
  66.  
  67. ?>


logowanie.php:
  1. <?php
  2. include('config.php');
  3.  
  4. if(!login() AND !isset($_POST['logowanie'])) {
  5. $text = '
  6. <br>
  7. <center>
  8. <table width="100%" cellpadding="5" cellpadding="0">
  9.  <th class="h">Logowanie!</th>
  10.  <tr>
  11. <td align="center">
  12. <br>
  13. <br>
  14. <form action="" method="post" name="loguj">
  15. <input type="hidden" name="logowanie" value="k">
  16. <table cellpadding="0" cellspacing="0">
  17.  <tr>
  18. <td>Login:&nbsp;</td>
  19. <td><input type="text" style="width: 250px" name="login"></td>
  20.  </tr>
  21.  <tr><td><img src="" width="1" height="3"></td></tr>
  22.  <tr>
  23. <td>Hasło:&nbsp;</td>
  24. <td><input type="password" style="width: 250px" name="haslo"></td>
  25.  </tr>
  26.  <tr>
  27. <td colspan="2">
  28.  <input type="checkbox" name="pamietaj" value="ok"> - Zapamiętaj mnie!<br>
  29. </td>
  30.  </tr>
  31. </table>
  32. <br>
  33. <table cellspacing="7"><tr><td>
  34. <input type="submit" value="Loguj!"> 
  35. </td><td>&nbsp;</td></tr></table>
  36. </form>
  37. </td>
  38. </tr>
  39. </table>
  40. ';
  41. die($text);
  42. }
  43.  
  44. if(!login() AND isset($_POST['logowanie'])) {
  45. $text = '
  46. <br>
  47. <center>
  48. <table width="100%" cellpadding="5" cellpadding="0">
  49.  <th class="h">Logowanie!</th>
  50.  <tr>
  51. <td align="center">
  52. <font color="red"><b>Zły Login lub Hasło!</b></font><br>
  53. <br>
  54. <form action="" method="post" name="loguj">
  55. <input type="hidden" name="logowanie" value="k">
  56. <table cellpadding="0" cellspacing="0">
  57.  <tr>
  58. <td>Login:&nbsp;</td>
  59. <td><input type="text" style="width: 250px" name="login"></td>
  60.  </tr>
  61. <tr><td><img src="" width="1" height="3"></td></tr>
  62.  <tr>
  63. <td>Hasło:&nbsp;</td>
  64. <td><input type="password" style="width: 250px" name="haslo"></td>
  65.  </tr>
  66.  <tr>
  67. <td colspan="2">
  68.  <input type="checkbox" name="pamietaj" value="ok"> - Zapamiętaj mnie!<br>
  69. </td>
  70.  </tr>
  71. </table>
  72. <br>
  73. <table cellspacing="7"><tr><td>
  74. <input type="submit" value="Loguj!">
  75. </td><td>&nbsp;</td></tr></table>
  76. </form>
  77. </td>
  78. </tr>
  79. </table>
  80. ';
  81. die($text);
  82. }
  83.  
  84. if(login()){
  85. $text = 'Witaj '.$_SESSION['login'].'!<br>
  86. <br>
  87. Moje gratulacje udało Ci się zalogować, trzeba przyznać, dobry jesteś!<br>
  88. <br>
  89. Możesz teraz przejść do super tajnego działu MEMBERS biggrin.gif<br>
  90. <br>
  91. <a href="members.php">Super Tajny Dział MEMBERS</a>';
  92. die($text);
  93. }
  94.  
  95. ?>


members.php (podstrona):
  1. <?php
  2. include('config.php');
  3. if(!login()) {
  4. $text = '<p style="">zaloguj no sie</p>';
  5. die($text);
  6. }
  7.  
  8. $text = 'To jest ten super tajny i super ważny dział MEMBERS!<br><br>
  9. Podoba Ci się?questionmark.gif<br><br>
  10. Mam lepsze nowiny, sesje nadal tutaj działają.<br>
  11. Chcesz dowodu?<br>
  12. Twój nick to: '.$_SESSION['nick'];
  13. die(text);
  14. ?>


Baza do tego:
id || nick || pass


Z gory dziekuje za pomoc ;-)
Mlodycompany
w kazdym pliku musisz miec session_start(); i zaraz po <?php czyli jak masz warunek to jest zle, bo np. jak masz sesje to ta strona jej nie rozpoczyna czyli jest tak jak by jej nie bylo
kosmos
Zawsze ale to zawsze używając sesji na danej podstronie, musisz ją zacząć od

  1. <?php
  2. ?>


Przed tym nie może być żadnych warunków. W swoim skrypcie sprawdzasz czy istnieje sesja i jeśli nie to ją rozpoczynasz. W tym przypadku tak się nie robi
in5ane
To nic nie dalo.
A i caly czas mam erro:
Kod
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ***) in *** on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ***) in *** on line 2


@edit:
Troche okroilem ten skrypt. Wyglada tak:
  1. <?php
  2.  
  3. $_CONFIG['MySQL']['host'] = "localhost";
  4. $_CONFIG['MySQL']['user'] = "webporn_webporn";
  5. $_CONFIG['MySQL']['pass'] = "web123porn";
  6. $_CONFIG['MySQL']['base'] = "webporn_webporn";
  7.  
  8. @mysql_connect($_CONFIG['MySQL']['host'], $_CONFIG['MySQL']['user'], $_CONFIG['MySQL']['pass']);
  9. @mysql_select_db($_CONFIG['MySQL']['base']);
  10.  
  11. function login() {
  12. global $_CONFIG;
  13. $zalogowany = false;
  14.  
  15. if(isset($_SESSION['login']) AND isset($_SESSION['haslo'])) {
  16. $login = $_SESSION['login'];
  17. $haslo = $_SESSION['haslo'];
  18. $metod = "session";
  19. }
  20. elseif(isset($_POST['login']) AND isset($_POST['haslo'])) {
  21. $login = mysql_real_escape_string($_POST['login']);
  22. $haslo = mysql_real_escape_string(md5($_POST['haslo']));
  23. $metod = "post";
  24. }
  25.  
  26. if(isset($metod)) {
  27. $query = mysql_query("SELECT * FROM `users` WHERE `nick`='".$login."' AND `pass`='".$haslo."';");
  28. if(mysql_num_rows($query) == 1) {
  29. $zalogowany = true; 
  30. if($metod <> "session") {
  31. $wiersz = mysql_fetch_array($query);
  32. $_SESSION['login'] = $wiersz['nick'];
  33. $_SESSION['haslo'] = $wiersz['pass'];
  34. }
  35.  }
  36. }
  37. return $zalogowany;
  38. }
  39.  
  40. function logout() {
  41. }
  42. ?>
Shili
Sprawdź, czy nie masz na początku znaku BOM.
in5ane
Nie ma! (chodzilo ci o jakies spacje czy cus?)
Shili
Nie, chodzi mi o znak niewidoczny jeśli chodzi o edytory tekstu, a psujący życie przy wysyłaniu nagłówków.
BOM - Byte Order Mark
kosmos
Wgrałem twój kod na mój serwer i żadne komunikaty mi się nie pojawiają...
in5ane
To ja mam cos serwer skopany. Mozna jakos wylaczyc w .htaccess raporty o tych bledach?
Shili
Raporty można wyłączyć, ale Ci nie zadziała ustawienie sesji i na tym się skończy. I nie serwer masz skopany, a na początku pliku masz znak BOM (post kosmosa z dużym prawdopodobieństwem to potwierdza)
in5ane
Jak mam usunac te BOMY?
kosmos
Pozwoliłem sobie zmienić początek kodu na taki smile.gif ( To dla mnie standard podczas testowania aplikacji )

  1. <?php
  2. print'Ala ma kota';
  3.  
  4. $_CONFIG['MySQL']['host'] = "localhost";
  5. $_CONFIG['MySQL']['user'] = "webporn_webporn";
  6. $_CONFIG['MySQL']['pass'] = "web123porn";
  7. $_CONFIG['MySQL']['base'] = "webporn_webporn";
  8. .
  9. .
  10. .
  11. .
  12. ?>


a wynik mam TAKI

Przyznam się że z tzw BOM`em się nie spotkałem i mnie to zaciekawiło. Jak widać u mnie go nie ma. Ale wygląda na to że Shili ma rację.
Nie mam pojęcia jak go usunąć niestety ale chętnie poczekam na tą odpowiedź bo faktycznie może mi się BOM przytrafić a jak widać może to człowieka wk.....
in5ane
No to ja juz nie mam pojecia co mam na to poradzic ;/
A jak sie te BOMY usuwa?
kosmos
a spróbuj skopiować do nowego całkiem pliku twój kod który dałeś tu na forum i wgraj go na serwer. Nie wiem może to coś pomoże ?
in5ane
Nic a nic, nie dalo rady. No szkurde...

@edit:
Wylaczylem to raportoawnie bledo i czesc ;p, smiga smile.gif
Shili
Wystarczy użyć edytora, który umie się z BOM rozprawić.
Ja ze swojej strony mogę polecić na szybko na przykład notepad++ (jest w polskiej wersji językowej), który w zakładce format ma taką sprytną opcję koduj bez bom.

@up
Śmigać śmiga, ale trudno to samo powiedzieć o sesjach, skoro ich nie ustawiasz, a tylko maskujesz, żeby nie pluły błędami winksmiley.jpg
in5ane
Zaraz sprobuje tym notepad++ i powiem jak poszlo. No bo nadal jest jeszcze blad z tym ze jak sie zaloguje i mam te wiadomosc i chce przejsc do tej podstrony members to gubi sesje.

No dobra, smiga, ze juz nie ma tych errorow. Teraz musze zerknac czy gubi te sesje ;p

Już wszystko dziala winksmiley.jpg
Dzieki wszystkim za pomoc (chlopakom z IRCa tez dzieki).
michal_robak
A ja mam problem z wylogowywanie. Starałem się to wykonać ale nie wyszlo mi. I albo pamiętało tylko jedą sesję i potem przy odpalaniu ponownie stronki logowało się ciągle jako jedno i to samo albo wcale nie chciało logować z automatu. O co chdozi sad.gif pomoze ktos bo mi już witki opadają sad.gif
Shili
Cytat
A ja mam problem z wylogowywanie. Starałem się to wykonać ale nie wyszlo mi.
Zaprezentuj to co starałeś się wykonać.
michal_robak
no wydawało mi się, że niewiele jest do roboty a to co zrobiłem wcześniej usunałem bo nie działało mi i ciężko mi było dojść do tego co wcześniej wykombinowałem ale tak. Skoro jest wykonana funkcja logout to nie powinno być z nią problemu prawda ?. Wystarczy ją zastosować więc moim zdaniem w klasie members.php tworzymy przycisk do wylogowania:

  1. <?php
  2. include('config.php');
  3. print_r($_COOKIE);
  4. echo "<br/>";
  5. print_r($_SESSION);
  6.  
  7. ?>
  8.  
  9. <form action="logowanie.php?wyloguj=tak" method="POST">
  10. <input type="submit" name="wyloguj" value="tak">
  11. </form>
  12.  
  13. <?
  14. if(!login()) {
  15. $text = '<p style="">zaloguj no sie</p>';
  16. die($text);
  17. }
  18.  
  19. $text = 'To jest ten super tajny i super ważny dział MEMBERS!<br><br>
  20. Podoba Ci się?<br><br>
  21. Mam lepsze nowiny, sesje nadal tutaj działają.<br>
  22. Chcesz dowodu?<br>
  23. Twój nick to: '.$_SESSION['login'];
  24. die($text);
  25. ?>


przechodzimy do logowania i jak jest opcja wyloguj=tak to wykonujemy to co wykonujemy:
  1. <?php
  2.  
  3. include('config.php');
  4.  
  5. print_r($_COOKIE);
  6. echo "<br/>";
  7. print_r($_SESSION);
  8. if($_GET['wyloguj']=="tak")
  9. {
  10. logout();
  11.  
  12. header("Location: logowanie.php");
  13. }
  14.  
  15. if(!login() AND !isset($_POST['logowanie'])) {
  16. ?>

dalej idzie to co w pierwowzorze

Nie wiem jak to poprawić bo on ewidentnie usuwa ciasteczka. Ale troche tego nie rozumiem. BO jak klikamy opcje zapamietaj to trzyma te cookies ciagle i jak weźmiemy wyloguj to on nie moze sie wylogować bo jak sie wyloguje to wtedy przeciez straci tą informację więc ja tu czegoś chyba nie czae w takim razie sad.gif. SKrypt jest załaczony na stronce gdzie wypiuje w pierwszej linii $COOKIES a w drugie $_SESSION:
http://michal-pietrasz.ovh.org/log/logowanie.php

aha i zapomniałem nadmienić ze na tej podanej stronce mozna sie zalogowac jako q lub a (hasło i login takie samo).


spojrzy ktoś fachowym okien na ten kod.
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.