Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Ginąca sesja
-Piotr_21-
post
Post #1





Goście







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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.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 (IMG:http://forum.php.pl/style_emoticons/default/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 :]
Go to the top of the page
+Quote Post
Ja_Szczur
post
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 4.12.2005
Skąd: Strzyżów

Ostrzeżenie: (0%)
-----


czy plik add_news.php jest includowany?
bo jeśli nie, to brakuje mu session_start() u góry

Ten post edytował Ja_Szczur 23.07.2006, 12:44:49
Go to the top of the page
+Quote Post
-Gość-
post
Post #3





Goście







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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) nie kapuje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Ja_Szczur
post
Post #4





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 4.12.2005
Skąd: Strzyżów

Ostrzeżenie: (0%)
-----


masz pewność, że to ciasteczko?
i zobacz kod pliku "../config/bd.php"
Go to the top of the page
+Quote Post
-Piotr_21-
post
Post #5





Goście







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 to the top of the page
+Quote Post
-Gość-
post
Post #6





Goście







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. ?>
Go to the top of the page
+Quote Post
Ja_Szczur
post
Post #7





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 4.12.2005
Skąd: Strzyżów

Ostrzeżenie: (0%)
-----


[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
Go to the top of the page
+Quote Post
-Piotr_21-
post
Post #8





Goście







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!!!
Go to the top of the page
+Quote Post
Ja_Szczur
post
Post #9





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 4.12.2005
Skąd: Strzyżów

Ostrzeżenie: (0%)
-----


powstawiaj sobie w kluczowych miejscach kodu var_dump( $_SESSION )
zobacz, kiedy sesja "znika"
Go to the top of the page
+Quote Post
-Gość-
post
Post #10





Goście







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 :/
Go to the top of the page
+Quote Post
Ja_Szczur
post
Post #11





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 4.12.2005
Skąd: Strzyżów

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

i czy masz register_globals włączone?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 00:53