Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Sesja działa po dwukrotnym odświeżeniu
Forum PHP.pl > Forum > Przedszkole
Turson
  1. <?php
  2. if($_SESSION["zalogowany"]!=1){
  3. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  4. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($_POST["haslo"])."'"))){
  5. echo 'Zalogowano poprawnie jako '.$_SESSION['login'].'. <a href=index.php>Przejdz na strone główna</a>';
  6.  
  7. $_SESSION["zalogowany"]=1;
  8. $_SESSION['login'] = $_POST['login'];
  9.  
  10. }
  11. else echo ShowLogin("Podano złe dane!!!");
  12. }
  13. else ShowLogin();
  14. }
  15. else{
  16. $nick = $_POST["login"];
  17. include("glowna.php");
  18. $haslo = @mysql_query("SELECT admin FROM users WHERE user_login='$_SESSION[login]'");
  19. while ($wiersz = mysql_fetch_array($haslo)) {
  20. if($wiersz[0] == 1) {
  21. $_SESSION["admin"]=1; }}?>
  22. <?php
  23. }
  24. ?>

Logowanie + sprawdzanie czy jest adminem i ewentualne dodanie tej informacji do sesji.

  1. <?php
  2. ?>
  3.  
  4. <?php
  5.  
  6. session_register("zalogowany");
  7. //strona dalej
  8. //nizej informacja o uzytkowniku
  9. <?PHP echo'<u>Zalogowany jako:</u> '.$_SESSION['login'].'
  10. <br><a href=?wyloguj=tak>Wyloguj</a><br>'; }
  11. if($_SESSION["admin"]==1){echo '<a href="admin.php">Admin Panel</a>';}
  12. //wylogowanie
  13. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;$_SESSION["admin"]=0;
  14. echo "<br>Zostałeś wylogowany z serwisu";}

Problemów jest kilka.
1) Gdy zaloguję się jako. np Turson, dostaję informację zwrotną "Zalogowano poprawnie jako $nick. Przejdz na strone główna"
W tym przypadku $nick to pozostałośc 'nickowa' po poprzedniej sesji, poprzednio zalogowanej osoby a nie tej aktualnie.
2) Kiedy zaloguję się jako admin i przejdę na stronę główną, a następnie odświeżę ponownie, otrzymuję link o możliwości przejścia do panelu admina, zamiast od razu po zalogowaniu i przejściu na index
krzywy36
a niszczysz sesje przy wylogowywaniu? nie. dodaj session_destroy()
Turson
session_destroy() działa mi w ten sposób, że następnie logując się Zalogowano poprawnie jako '.$_SESSION['login'].'. działa w ten sposob ze nick w ogole nie wyswietla sie
krzywy36
a masz w pierwszym pliku session_start()?
Edit: nie żebym się czepiał ale ten kod jest jakiś dziwny oO, jeśli nie jest zalogowany to go logujesz ok, ale jeśli jest zalogowany? \
  1. else{
  2. $nick = $_POST["login"];
  3. include("glowna.php");
  4. $haslo = @mysql_query("SELECT admin FROM users WHERE user_login='$_SESSION[login]'");
  5. while ($wiersz = mysql_fetch_array($haslo)) {
  6. if($wiersz[0] == 1) {
  7. $_SESSION["admin"]=1; }}?>

tego w ogóle nie rozumiem, co to ma na celu? jeśli chcesz sprawdzić czy uzytkownik jest adminem to po prostu dodaj w bazie kolejne pole np. "is_admin", a tutaj user musi wypełniać jakiś formularz logujący jak już jest zalogowany (?!).
Turson
Tak na samym początku dokumentu
krzywy36
ehh.
  1. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($_POST["haslo"])."'"))){
  2. echo 'Zalogowano poprawnie jako '.$_SESSION['login'].'. <a href=index.php>Przejdz na strone główna</a>';
  3.  
  4. $_SESSION["zalogowany"]=1;
  5. $_SESSION['login'] = $_POST['login'];
  6.  
  7. }

nie widzisz nic zlego w tym kodzie? wyswietlasz $_SESSION['login'] któremu dopiero potem przypisujesz wartość i dziwisz się że jest puste? troche logiki...
session_destroy() ma być do wylogowywania.
Turson
Ok - problem z podaniem nicku przy zalogowaniu naprawiony.
A to:
2) Kiedy zaloguję się jako admin i przejdę na stronę główną, a następnie odświeżę ponownie, otrzymuję link o możliwości przejścia do panelu admina, zamiast od razu po zalogowaniu i przejściu na index, tak samo z wylogowaniem, jak sie wyloguje to napisac Wyloguj dalej jest do nastepnego refresha
krzywy36
nie mam pojęcia, kod jest napisany strasznie i nie mam czasu ani chęci się w nim babrać, jeśli jeszcze tego nie zrobiłeś to dodaj przy wylogowywaniu session_destroy(). Może ktoś inny znajdzie chęci, żeby to zrozumieć wink.gif.
Turson
wyloguj.php
  1. <?php
  2. $_SESSION["zalogowany"]=0;$_SESSION["admin"]=0;
  3. echo "<br>Zostałes wylogowany z serwisu.<br><a href=index.php>zaloguj ponownie</a>";
  4. ?>

wiec jest:)
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.