Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]logowanie, cos z sesja?
Forum PHP.pl > Forum > Przedszkole
cythrus
witam,
generalnie... po dlugich a ciezkich zmaganiach udało mi się zorganizować coś takiego:

  1. <?php // access.php
  2. /* dodanie "<? include 'access.php'; ?>" do nagłówka pliku zabezpiecza strone */
  3.  
  4. include '../lib/common.php'; //zawiera error()
  5. include '../lib/db.php'; // dbConnect(nazwa_bazy)
  6.  
  7.  
  8.  //sprawdza czy login i haslo są dostępne z formularza lub sesji i tworzy $login i 
    $pass
  9. if(isset($_POST['login'])) {
  10. $login = $_POST['login'];
  11. } elseif (isset($_SESSION['login'])) {
  12. $login = $_SESSION['login'];
  13. }
  14. if(isset($_POST['pass'])) {
  15. $pass = $_POST['pass'];
  16. } elseif (isset($_SESSION['pass'])) {
  17. $pass = $_SESSION['pass'];
  18. }
  19.  
  20.  
  21.  //jesli zmienna $login nie istnieje, wyświetla formularz logowania
  22. if(!isset($login)) {
  23. ?>
  24.  
  25. <HTML> <!-- formularz logowania -->
  26. <HEAD>
  27. <TITLE>Logowanie</TITLE>
  28. <STYLE type="text/css">
  29. <!--
  30. BODY, TABLE, FORM { font-size: 8pt; font-family: Arial, Verdana; text-decoration: none }
  31. SELECT, INPUT { font-size: 8pt; font-family: Arial, Courier; text-decoration: none }
  32. -->
  33. </STYLE>
  34. </HEAD>
  35. <BODY>
  36. <B>Musisz się zalogować</B><BR>
  37. <FORM method="post" action="<?=$_SERVER['PHP_SELF']?>">
  38. <TABLE border="0" cellpadding="0" cellspacing="5">
  39. <TR>
  40. <TD alignn="right">Login:</TD>
  41. <TD>
  42. <INPUT name="login" typen="text" maxlenght="16" size="25">
  43. </TD>
  44. </TR>
  45. <TR>
  46. <TD align="right">Hasło:</TD>
  47. <TD>
  48. <INPUT name="pass" type="password" maxlength="100" size="25">
  49. </TD>
  50. </TR>
  51. <TD align="cener" colspan="2">
  52. <INPUT type="submit" value="Zaloguj">
  53. </TD>
  54. </TR>
  55. </TABLE>
  56. </FORM>
  57. </BODY>
  58. </HTML>
  59.  
  60. <?php // i kończy skrypt
  61. }
  62.  
  63.  // jeśli istnieje, to: łączy się z bazą
  64. dbConnect("sklep");
  65.  
  66.  // sprawdza czy login i hasło są poprawne
  67. $sql = "SELECT * FROM admins WHERE login = '$login' AND pass = PASSWORD('$pass')";
  68. $result = mysql_query($sql);
  69. if(!$result) {
  70. error('Błąd komunikacji z listą administratorów');
  71. }
  72.  
  73.  // jeśli nie są, usuwa $_SESSION['login'] i $_SESSION['pass'] i wyświetla 'Brak dostępu'
  74. if(mysql_num_rows($result)==0) {
  75. unset($_SESSION['login']);
  76. unset($_SESSION['pass']);
  77. ?>
  78.  
  79. <HTML> <!-- Brak dostępu -->
  80. <HEAD> 
  81. <TITLE>Brak dostępu</TITLE>
  82. <STYLE type="text/css">
  83. <!--
  84. BODY { font-size: 8pt; font-family: Arial, Verdana; text-decoration: none }
  85. -->
  86. </STYLE>
  87. </HEAD> 
  88. <BODY> 
  89. <B>Brak dostępu</B>
  90. <P>Sprawdź czy poprawnie wpisałeś Login i Hasło</P> 
  91. <A href="javascript:history.go(-1)">powrót</A>
  92. </BODY> 
  93. </HTML>
  94.  
  95. <?php // następnie kończy skrypt
  96. exit; 
  97. }
  98.  
  99.  // natomiast jeśli są poprawne, pobiera pełną nazwę użytkownika
  100. $kto = mysql_result($result,0,'login');
  101. ?>


i prosta stronka

  1. <? include './access.php'; ?>
  2. <HTML>
  3. <HEAD>
  4. <TITLE>Strona zabezpieczona</TITLE>
  5. </HEAD>
  6. <BODY>
  7. <P>Witaj, <?=$kto?>! Ta informacja jest poufna...</P>
  8. </BODY>
  9. </HTML>


i chce, zeby sie login i haslo zapisaly w sesji i zebym nie musial sie logowac przy kazdym odswiezeniu... nie mam pojecia dlaczego jest zle :/

przeciez po wywolaniu access.php skrypt tworzy $login i $pass i juz potem nic nie zmienia... czy zmienia, tylko ja nie widzę co...? heup :/ męczę się juz kilka tygodni, a to zwykłe logowanie przecież! wstyd sad.gif strach pomyslec co bedzie potem...
gladiror
sprobuj moze:

  1. <?php
  2.  
  3. $kto = $_SESSION['login'];
  4.  
  5. ?>


dopisac do tego pierwszego zamiast ostatniej linijki...
cythrus
kurde :/ wtedy $kto ma wartość "" czyli żadną :/ to by znaczyło, że $_SESSION['login'] nie jest tworzone?

to by było logiczne o tyle, ze jak nie jest tworzone, to za kazdym razem
  1. <?php
  2. if ($_SESSION['login'])
  3. ?>

ma wartosc false :|

a $_SESSION['login'] powinno być dostępne przez cały czas trwania sesji przecież sad.gif

access.php rozpoczyna sesję... muszę dać znowu session_start() na stronie, którą chcę zabezpieczyć tym skryptem? bo jak tak zrobie, nie ważne czy przed czy za include access.php, to pisze ze mam blad w wierszu 21 pliku access.php, czyli tutaj:
  1. <?php
  2. elseif(isset($_SESSION['pass'] {
  3. $pass = $_SESSION['pass']; // wiersz 21
  4. }
  5. ?>


aha, poprawiłem elese na elseif, żeby sprawdzał, czy zmienna sesji została w ogóle utworzona... zaraz editne w poprzednim poście

ciągle proszę o pomoc :/
Balas
session_start(); musisz dawac na poczatku strony (zawsze) gdy uzywasz sesji winksmiley.jpg

a w wyzej podanym kodzie masz niedomkniety nawias okragly po $_SESSION['pass']
cythrus
...poprawiłem nawiasy i juz nie ma bledu... ale dalej przy kazdym odswiezeniu stronki musze podac login i haslo, w najlepszym wypadku, kiedy nic sie na stronce nie zmienia, to wyskakuje informacja, ze odswiezenie nie jest mozliwe bez ponownego wyslania informacji do stronki i musze potwierdzac, zeby wyslal... ani to wygodne ani estetyczne - jakies pomysly? :| na prawde nie rozumiem dlaczego login i haslo nie zostaja w sesji... a moze zostaja, tylko ja je jakos zle sprawdzam?
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.