Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Uaktualnienie sesji bez wylogowania
Forum PHP.pl > Forum > PHP
yayco
Witam.

Stworzyłem skypt rejestracji, logowania oparty na sesjach. Aktualnie pracuje nad podskyptem, który ma za zadanie pozwolić użytkownikowi zmienić swoje hasło.

Problem: Sesja korzysta z dwóch zmiennych $login i $haslo do sprawdzania czy użytkownik jest zalogowany czy też nie. Po zmianie hasła (czyli aktualizacji bazy danyc MySQL w nowe hasło) sesja jest przerwana, użytkownik wylogowany i trzeba sie na nowo zalogowac z nowym hasłem. Jakieś solucje jak uaktualnić sesje, żeby użytkownik nie został wylogowany?

Formularz zmiany hasła:
  1. <form method=post action=index.php?id=changepassword&akcja=wykonaj>
  2.  
  3. Aktualne haslo: <input maxlength="32" type="password" name=ahaslo>
  4. Nowe hasło: <input maxlength="32" type="password" name=bhaslo>
  5. Powtórz nowe hasło: <input maxlength="32" type="password" name=chaslo>
  6.  
  7. <input type="submit" value="Zarejestruj">
  8.  
  9. </form>



Skrypt zmiany hasła
  1. <?php
  2. $nick = $_SESSION['nick'];
  3. $haslo = $_SESSION['haslo'];
  4. if ((empty($nick)) AND (empty($haslo))) {
  5. echo '<br>Nie byłeś zalogowany albo zostałeś wylogowany<br><a href="index.php">Strona Główna</a><br>';
  6. }
  7. $user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE `nick`='$nick' AND `haslo`='$haslo' LIMIT 1"));
  8. if (empty($user[id]) OR !isset($user[id])) {
  9. echo '<br>Nieprawidłowe logowanie.<br>';
  10. }
  11. // tresc dla zalogowanego uzytkownika
  12. ?>
  13.  
  14. <?php
  15. $akcja = $_GET['akcja'];
  16. if ($akcja == "wykonaj")
  17. {
  18.  
  19. $ahaslo = substr($_POST['ahaslo'],0,32); // pobiera hasło z formularza, aktualne
  20. $bhaslo = substr($_POST['bhaslo'],0,32); // pobiera hasło z formularza, nowe
  21. $chaslo = substr($_POST['chaslo'],0,32); // pobiera hasło z formularza, nowe, zeby porównać czy oba są te same
  22. $mdahaslo = md5($ahaslo); //szyfrowanie hasla aktualnego
  23. $mdbhaslo = md5($bhaslo); //szyfrowanie hasla nowego
  24.  
  25. $komunikaty = '';
  26. $spr1 = strlen($bhaslo);
  27.  
  28. if (!$ahaslo || !$bhaslo || !$chaslo ) {
  29. $komunikaty .= "Musisz wypełnić wszystkie pola!<br>"; }
  30. if ($mdahaslo != $haslo) {
  31. $komunikaty .= "Twoje aktualne haslo jest niepoprawne.<br>"; }
  32. if ($spr1 < 4) {
  33. $komunikaty .= "Nowe hasło musi mieć przynajmniej 4 znaki<br>"; }
  34. if ($bhaslo != $chaslo) {
  35. $komunikaty .= "Hasła się nie zgadzają ...<br>";}
  36.  
  37.  
  38. if ($komunikaty)
  39. {
  40. <b>Zmiana hasła nie powiodła się</b><br>
  41. '.$komunikaty.'<br>';
  42. }
  43. else
  44. {
  45.  
  46. //jesli wszystko jest ok zmienia haslo, kttore jest zaszyfrowane i zmienia w bazie danych.
  47.  
  48. mysql_query("UPDATE `uzytkownicy` SET haslo='$mdbhaslo' WHERE nick='$nick'") or die("Nie można zmienic hasła!");
  49.  
  50. }
  51. }
  52. ?>


Skrypt działa lecz, nastepuje po nim wylogowanie.
Pozdrawiam smile.gif

kadlub
a nie możesz po prostu tam jak już sprawdzisz że w bazie sie zmieni hasło dać
$_SESSION['haslo']='nowe hasło';
yayco
Oczywiście kadlub, ze to był pierwszy pomysł na jaki wpadłem. Niedziała, po zmianie hasła ciągle jest wylogowanie.
mat-bi
A czy wiesz, że zwykle do sesji daje się tylko id usera? Nick i Hasło bez sensu, gdyż są na pewno bardziej zmienne niż id.
BaN
Z hasłem się zgodzę, że przechowywanie w sesji jest raczej bez sensu, z loginem nie, bo raczej nie powinien się zmieniać
Co do głównego wątku, to nie widzę session_start()
yayco
Panowie, problem rozwiązany. Podstawy PHP do nadrobienia.. smile.gif

1) $_SESSION['haslo'] = '$zmienna';
2) $_SESSION['haslo'] = $zmienna;

Powyższa roznica miała dość wielki wpływ. 2 Warunek działa.
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.