Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Ginąca sesja
Forum PHP.pl > Forum > Przedszkole
Piotr_21
Mam mianowicie taki problem. Użytkownik loguje się poprzez plik:

zaloguj.php
  1. include "./config/config.php";
  2.  
  3. $haslo=$_POST['haslo'];
  4. $login=$_POST['login'];
  5.  
  6. if (($login == "")||($haslo == "")){
  7. //tutaj jest formularz, który oczywiście wysyłany jest do tego samego pliku
  8. }
  9. else{ //gdy już są ustawione login i hasło
  10. $zaszyfr_haslo=md5($haslo);
  11.  
  12. $polaczenie = mysql_connect($host, $username, $password);
  13. mysql_select_db($database, $polaczenie);
  14.  
  15. $zapytanie= "SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$zaszyfr_haslo'";
  16. $idzapytania=mysql_query($zapytanie);
  17. $num_rows = mysql_num_rows($idzapytania);
  18. if($num_rows){
  19.  
  20. $wiersz = mysql_fetch_row($idzapytania);
  21. session_name("login");
  22. session_start();
  23. session_name(login);
  24. session_register('login');
  25. session_register('imie');
  26. session_register('uwierz');
  27. session_register('grant');
  28. $login=$wiersz[3];
  29. $uwierz="true";
  30. $grant=$wiersz[9];
  31. $imie="$wiersz[1] $wiersz[2]";
  32. header("powrót do strony głównej");
  33. exit;
  34. }
  35.  
  36. mysql_close($polaczenie);
  37. else{
  38. echo "<h5>nie ma takiego uzytkownika lub podane zle haslo</h5>";
  39. }
  40.  
  41. }


logowanie działa dobrze i wszystko jest cacy. Jak przechodzę na jakieś strony gdzie jest tylko tekst to wpis w pliku głównym


index.php
  1. <?php
  2. session_name("login");
  3. session_start();
  4.  
  5. $login=$_SESSION['login'];
  6. $uwierz=$_SESSION['uwierz'];
  7. $grant=$_SESSION['grant'];
  8. $imie=$_SESSION['imie'];
  9.  
  10. // cześc dalsza...
  11. ?>

ładnie odbiera dane sesji. Problem pojawia się przy module dodawanie newsów bo z tego co zauważyłem on wysyła także ciasteczko, które kasuje chyba to ciasteczko sesji. Dlatego próbowałem zmienić nazwę sesji tak, żeby i ciasteczko inaczej się nazywało ale ciasteczko jest ciągle PHPSESSID. Jak zapobiec nakładaniu się ciasteczek questionmark.gifquestionmark.gif Kod na dodawanie newsa to:

add_news.php
  1. <?php
  2. $data=date("Y-m-d");
  3. $dodaj=$_POST['dodaj'] ;
  4. if($dodaj==""){
  5.  
  6. $login=$_SESSION['login']; //i już tutaj nie pobiera zmiennej login bo sesja zgineła
  7.  
  8. //tutaj jest formularz, który wysyła newsa, wraz z datą i loginem osoby która go dodała, do tego samego pliku. Oczywiście loginu osoby, która go dodała już nie ma bo zgineła sesja.
  9. }
  10. else{
  11.  
  12. include "../config/bd.php";
  13.  
  14. $news=$_POST['news'];
  15.  
  16. $pola_p="`id`,`login`,`news`,`data`";
  17. $wartosci_p="'','$login','$news','$data'";
  18. $tabelka="`news`";
  19.  
  20. bd_add($pola_p,$wartosci_p,$tabelka);
  21.  
  22. header("powrót na stronę główną");
  23. exit;
  24. }
  25. ?>


Z góry wielkie dzięki za pomoc!!!! I jak mówię. Jak dla mnie problem jest w nadpisujących się ciasteczkach ale próba zmiany tego stanu rzeczy session_name() nie odniosła skutku sad.gif

P.S Cytaty dałem w [HTML] a nie w [php] bo dodawał niepotrzebnie slashe tak jakby to wszystko szło przez ECHO :]
Ja_Szczur
czy plik add_news.php jest includowany?
bo jeśli nie, to brakuje mu session_start() u góry
Gość
jest includowany ale dla pewności dodałem

session_name("login");
session_start();

i i tak nie chodzi :/

i czemu w ogóle add_news wysyła ciasteczko questionmark.gif nie kapuje smile.gif
Ja_Szczur
masz pewność, że to ciasteczko?
i zobacz kod pliku "../config/bd.php"
Piotr_21
Tam wcześniej to ja byłem. Chciałęm jeszce dodać, że pomimo, że jest session_name("login") to wysyłane jest ciasteczko PHPSESSID. Wiem bo mam taką wtyczkę, która pokazuje nagłówki i argumenty POST GET i CIASTECZKA ustawiane. Czyli tak jak by to session_name() w ogóle nie działało. Nie mówiąc, że dalej mnie zastanawia czemu add_news wysyła też ciasteczko z PHPSESSID ale innym niż było przy logowaniu :/
Gość
plik bd.php to definicje prostych funkcji dla baz danych. Wygląda tak:

  1. <?php
  2.  
  3. include "config.php"; //plik z nazwa bazy danych, hasłem, użytkownikiem i.t.d
  4.  
  5. function bd_add($pola,$wartosci,$tabela){
  6. global $host;
  7. global $username;
  8. global $password;
  9. global $database;
  10. $polaczenie = mysql_connect($host, $username, $password);
  11. mysql_select_db($database, $polaczenie);
  12. $zapytanie="INSERT INTO $tabela ($pola) VALUES ($wartosci) ";
  13. $wynik = mysql_query($zapytanie) or die("Query failed");
  14. mysql_close($polaczenie);
  15.  
  16. }
  17.  
  18. function bd_del($tabela,$warunek){
  19. global $host;
  20. global $username;
  21. global $password;
  22. global $database;
  23. $polaczenie = mysql_connect($host, $username, $password);
  24. mysql_select_db($database, $polaczenie);
  25. $zapytanie = "DELETE FROM $tabela WHERE $warunek";
  26. $idzapytania = mysql_query($zapytanie);
  27. mysql_close($polaczenie);
  28. }
  29.  
  30. function bd_update($tabela,$zmiana,$rekord){
  31. global $host;
  32. global $username;
  33. global $password;
  34. global $database;
  35. $polaczenie = mysql_connect($host, $username, $password);
  36. mysql_select_db($database, $polaczenie);
  37. $zapytanie = "UPDATE $tabela SET $zmiana WHERE $rekord";
  38. $idzapytania = mysql_query($zapytanie);
  39. mysql_close($polaczenie);
  40. }
  41.  
  42.  
  43. ?>
Ja_Szczur
[zaloguj.php]

  1. <?php
  2. session_name("login");
  3. session_name(login); // <--- a to co?
  4. ?>


aha, kilka poprawek [kosmetyka]:

$uwierz = true; // bez " "
$imie = $wiersz[1].' '.$wiersz[2];

używaj dla stringów ' ', skrypt działa szybciej
Piotr_21
Cytat(Ja_Szczur @ 24.07.2006, 10:55 ) *
[zaloguj.php]

  1. <?php
  2. session_name("login");
  3. session_name(login); // <--- a to co?
  4. ?>


no dobra... usunołem session_name(login). DALEJ NIE DZIAŁA :/ Kurcze... czy ktoś wie jak tutaj rozwiązać problem. Tudzież jak inaczej zrobić by po zalogowaniu... prz pisaniu postu skrypt wiedział kto go napisał(bo wie kto jest zalogowany) Bo o to się tu rozchodzi!!!! Niech ktoś pomoże!!!
Ja_Szczur
powstawiaj sobie w kluczowych miejscach kodu var_dump( $_SESSION )
zobacz, kiedy sesja "znika"
Gość
zdrobiłem jak mówiłeś z var_dump i jest tak jak mówiłem. Sesja ginie przy "właczeniu" add_news.php:

  1. <?php
  2. $data=date("Y-m-d");
  3. $dodaj=$_POST['dodaj'] ;
  4. if($dodaj==""){
  5.  
  6. $login=$_SESSION['login']; //i już tutaj nie pobiera zmiennej login bo sesja zgineła
  7.  
  8. //tutaj jest formularz, który wysyła newsa, wraz z datą i loginem osoby która go dodała, do tego samego pliku. Oczywiście loginu osoby, która go dodała już nie ma bo zgineła sesja.
  9. }
  10. else{
  11.  
  12. include "../config/bd.php";
  13.  
  14. $news=$_POST['news'];
  15.  
  16. $pola_p="`id`,`login`,`news`,`data`";
  17. $wartosci_p="'','$login','$news','$data'";
  18. $tabelka="`news`";
  19.  
  20. bd_add($pola_p,$wartosci_p,$tabelka);
  21.  
  22. header("powrót na stronę główną");
  23. exit;
  24. }
  25. ?>


Dzieje się to przy wchodzeniu w ten skrypt bo on "nadpisuje" ciasteczko innymi danymi :/ Nie wiem czemu w ogóle ten skrypt wysyła jakieś ciasteczko :/
Ja_Szczur
wyślij mi kod na majla, bo to ciekawy problem
kiedyś mi ginęły dane sesyjne w podobny sposób, gdzieś tam miałem foreach źle napisane, które kasowało dane tongue.gif

i czy masz register_globals włączone?
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.