Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sesja nie trzyma.
Forum PHP.pl > Forum > Przedszkole
Rewil
Szukam błędu bo dość już ja rozbudowałem, ale jest problem taki iż jej porostu nie trzyma. To znaczy logując się, wszystko wyświetla się tak jak powinno być ale po przejściu na inna stronę z ta sesja zachowuje się tak jakby się kasowała po drodze.

No to mamy przykładowo pierwszy plik:
  1. <?
  2. $_SESSION['auth_login'] = "Costam";
  3. $_SESSION['auth_password'] = "Blablabla";
  4.  
  5. echo $_SESSION['auth_login'];
  6. ?>

Wynikiem jest "Costam"

I teraz nic nie robiac przejdziemy na inna strone ktora ma samo echo $_SESSION['auth_login'];
To nie powinno wyswietlic to co sie zachowalo z poprzedniej? Bo mi nic nie wyświetla.
Matimor
Temat: PHPSesje czy Cookies
celbarowicz
na następnej stronie też musi być session_start();
Rewil
Właśnie w tym problem że jest.
darko
Cytat(Rewil @ 8.01.2010, 18:26:06 ) *
I teraz nic nie robiac przejdziemy na inna strone ktora ma samo echo $_SESSION['auth_login'];
To nie powinno wyswietlic to co sie zachowalo z poprzedniej? Bo mi nic nie wyświetla.


Cytat(Rewil)
Właśnie w tym problem że jest.


To jest czy nie ma? Pokaż kod.
celbarowicz
<?php
.
.
header('location: tu wpisz nazwę drugiego pliku .php');
?>
Rewil
  1. <?
  2. include 'db.php';
  3.  
  4. $czas = 60 * 60 * 2;
  5.  
  6. if (!isset($_SESSION['PHPSESSID'])){
  7.  
  8. $login_check = $_POST['login'];
  9. $password_check = $_POST['password'];
  10.  
  11. $sql2 = mysql_query("SELECT * FROM users WHERE login = '$login_check'");
  12. while($rows2 = mysql_fetch_array($sql2)){
  13.  
  14. if($rows2['password'] == $password_check){
  15. $sql = "SELECT * FROM users WHERE login = '$login_check' AND password = '$password_check'";
  16. $result = mysql_query($sql);
  17.  
  18. if($rows2['active'] != "0"){
  19. header("Location: aktywuj_konto.php");
  20. exit();
  21. }
  22.  
  23. if (!$result) {
  24. echo "Rozwaliła się tutaj";
  25. }else{
  26. $row = mysql_fetch_array($result);
  27. $_SESSION['auth_login'] = $row['login'];
  28. $_SESSION['auth_password'] = $row['password'];
  29. $_SESSION['auth_email'] = $row['email'];
  30. $_SESSION['auth_ranga'] = $row['ranga'];
  31. $_SESSION['auth_name'] = $row['name'];
  32. $_SESSION['auth_avatar'] = $row['avatar'];
  33. $_SESSION['auth_id'] = $row['user_id'];
  34. $auth_login = $_SESSION['auth_login'];
  35. $auth_password = $_SESSION['auth_password'];
  36. $auth_email = $_SESSION['auth_email'];
  37. $auth_id = $_SESSION['auth_id'];
  38. $auth_name = $_SESSION['auth_name'];
  39. $auth_ranga = $_SESSION['auth_ranga'];
  40. $auth_avatar = $_SESSION['auth_avatar'];
  41. }
  42.  
  43. if (mysql_num_rows($result) == 0) {
  44. unset($_SESSION['auth_login']);
  45. unset($_SESSION['auth_password']);
  46. unset($_SESSION['auth_name']);
  47. unset($_SESSION['auth_ranga']);
  48. $_SESSION = array();
  49. }
  50.  
  51.  
  52. }else{
  53. unset($_SESSION['auth_login']);
  54. unset($_SESSION['auth_password']);
  55. unset($_SESSION['auth_name']);
  56. unset($_SESSION['auth_ranga']);
  57. $_SESSION = array();
  58. }
  59.  
  60. }
  61.  
  62. }else{
  63. }
  64.  
  65. ?>


includuje to do kazdego pliku. Tam mogą być niektóre kody nie potrzebne, ale to przez to że już kombinuje wszystkimi sposobami żeby to dzialało.
darko
Może w bazie nie ma danych, albo jest błąd zapytania i niszczysz sesję ( session_destroy(); )


// edit
no tak, niszczysz sesję, bo po przekierowaniu nie ma wartości dla
$login_check = $_POST['login'];
$password_check = $_POST['password'];

to też zapisz w sesji i potem nie wyciągaj za każdym razem danych z post tylko z session, masz błąd w logice
erix
  1. if (!isset($_SESSION['PHPSESSID'])){
  2.  

Od kiedy ciastka same z siebie migrują do sesji? Ten warunek nie ma prawa się wykonać. Dawaj session_start niezależnie od warunków.
Rewil
Nie wiem moze sie myle, ale:

  1. if (!isset($_SESSION['PHPSESSID'])){ // Jezeli sesj nie ma to:
  2.  
  3. $login_check = $_POST['login'];
  4. $password_check = $_POST['password'];
  5. plus kod odpowiadajacy za tworzenie sesji i dodanie roznych jej wartosci;
  6.  
  7. }else{ // Jeżeli jest
  8.  
  9. session_start(); // Podtrzymaj sesje.
  10. }


Dlatego chcialem sprawdzic czy same podstawy z pierwszego posta dzialaja. I nie dzialaja.
Dobrze rozumuje?

//Update Góra
Przerabiam kod na poprawny. Dzięki za info, później dam znać o rezultatach.
bastard13
spróbuj uruchomić sesję na samym początku, a później ewentualnie po nie spełnieniu warunków ją zniszcz, bo z tego co pamiętam to session_start() powinno się umieszczać na początku pliku.
Rewil
Napisałem nowy kod, działa mi on na localhoscie a na serwerze już nie (To samo nie trzyma na innych stronach, na localu wszystko dobrze chodzi):
  1. <?
  2. include 'db.php';
  3. $czas = 60 * 60 * 30;
  4. // Sprawdzanie czy w formularzu są poprawne dane - przed zalogowaniem
  5. $post_login = $_POST['login'];
  6. $post_password = $_POST['password'];
  7.  
  8. $sql = "SELECT * FROM users WHERE login = '$post_login' AND password = '$post_password'";
  9. $result = mysql_query($sql);
  10. $row = mysql_fetch_array($result);
  11.  
  12.  
  13. if(!isset($_POST['login']) && !isset($_POST['password'])){
  14. #echo "Puste";
  15. $error = true;
  16. }
  17.  
  18. if(!$row['id']){
  19. #echo "Login lub Hasło nie poprawny";
  20. $error = true;
  21. }
  22.  
  23. if(!$error){
  24. #echo "nie ma błędu";
  25. $_SESSION['auth_sesid'] = session_id();
  26. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  27. $_SESSION['auth_login'] = $row['login'];
  28. $_SESSION['auth_password'] = $row['password'];
  29. $_SESSION['auth_email'] = $row['email'];
  30. $_SESSION['auth_ranga'] = $row['ranga'];
  31. $_SESSION['auth_name'] = $row['name'];
  32. $_SESSION['auth_avatar'] = $row['avatar'];
  33. $_SESSION['auth_id'] = $row['user_id'];
  34. $_SESSION['auth_time'] = time();
  35. $auth_ip = $_SESSION['ip'];
  36. $auth_login = $_SESSION['auth_login'];
  37. $auth_password = $_SESSION['auth_password'];
  38. $auth_email = $_SESSION['auth_email'];
  39. $auth_id = $_SESSION['auth_id'];
  40. $auth_name = $_SESSION['auth_name'];
  41. $auth_ranga = $_SESSION['auth_ranga'];
  42. $auth_avatar = $_SESSION['auth_avatar'];
  43. $auth_time = $_SESSION['auth_time'];
  44. }
  45.  
  46. //Sprawdzanie w sesji czy są poprawne dane - po zalogowaniu.
  47.  
  48. $sql2 = "SELECT * FROM users WHERE login = '$auth_login' AND password = '$auth_password'";
  49. $result2 = mysql_query($sql2);
  50. $row2 = mysql_fetch_array($result);
  51.  
  52. if(!$row2['login']){
  53. #echo "Login lub Hasło nie poprawny - w sesji";
  54. $error2 = true;
  55. }
  56.  
  57.  
  58. ?>
erix
Włącz raportowanie błędów i zobacz, czy coś wypluwa.
Rewil
"Wypluło" i sobie poradziłem. Widać jeden serwer nie równy drugiemu smile.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.