Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Zgubiona sesja.
kamilos809
post
Post #1





Grupa: Zarejestrowani
Postów: 165
Pomógł: 3
Dołączył: 2.04.2010

Ostrzeżenie: (10%)
X----


Hejka
Problem ma się tak: Mam stronkę opartą na sesji. Sesja zwykła, przechowuje login i hasło.
Kiedy się spotka z tym kodem:
  1. $sql = "INSERT INTO posty VALUES (NULL, '$tresc', '$user', '$rodzic', '$temat')";
  2. $result = mysql_query($sql);
  3. if($result) echo'<a href="temat.php?temat='.$_POST['temat'].'">Powrót</a>';


sesję szlag trafia i trzeba ją tworzyć od nowa :/
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
gitbejbe
post
Post #2





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


zawsze na początku KAŻDEGO dokumentu : session_start();
Go to the top of the page
+Quote Post
freemp3
post
Post #3





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Cytat
zawsze na początku KAŻDEGO dokumentu : session_start();

Nie do końca. Sesjia powinna być uruchomiona tylko raz, ponieważ aplikacja później sypie informacjami o ponownym starcie sesji. Jeśli masz jakiś globalny plik, który jest ładowany za każdym razem to do niego powinieneś wrzucić start sesji.



--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
jackraymund
post
Post #4





Grupa: Zarejestrowani
Postów: 217
Pomógł: 21
Dołączył: 10.06.2011
Skąd: Głogów

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


Niemozna tak? Mam klase i nie w kazdej funkcji potrzebuje sesji, w konstruktorze tez troche niezbyt bo mam funkcje statyczne jak islogged.
Wiec session_start uzywam moze z kilka razy przy wczytaniu strony.
Zawsze pod koniec funkcji koncze sesje funkcja session_write_close()

Jest to zle? Wszystko dziala poprawnie.

Ten post edytował jackraymund 23.08.2013, 08:44:57


--------------------
Wykonuje zlecenia na pobieranie danych ze stron i różne boty.
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Mam klase i nie w kazdej funkcji potrzebuje sesji
Super.... ale jak juz raz wystarowales sesje to ciagle jej zamykanie i startowanie jest totalnie bez sensu.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
freemp3
post
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Owszem będzie to działać poprawnie, nie powiedziałem, że nie. Sesja jest przecież dostępna w globalnej tablicy, więc dlaczego nie uruchomić jej raz i mieć święty spokój? Każde takie uruchomienie to tylko strata czasu. Może i nie za wiele, ale przy dużym ruchu na stronie może to powodować zbędne obciążenie i wydłużyć czas ładowania.

Ten post edytował freemp3 23.08.2013, 10:56:29


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
jackraymund
post
Post #7





Grupa: Zarejestrowani
Postów: 217
Pomógł: 21
Dołączył: 10.06.2011
Skąd: Głogów

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


Czyli jezeli zamienię funkcje statyczna na zwykłą, w konstruktorze dam start a w destruktorze end to sesja bedzie dzialac na calym obiekcie?


--------------------
Wykonuje zlecenia na pobieranie danych ze stron i różne boty.
Go to the top of the page
+Quote Post
freemp3
post
Post #8





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Czyli jeżeli w gdziekolwiek w kodzie wywołasz start sesji to do tego momentu zmienna $_SESSION jest uzupełniana i jest dostępna w każdym miejscu w kodzie. Nie ważne czy jest to funkcja, metoda zwykła czy statyczna, konstruktor czy destruktor, jest to zmienna globalna. Zachowuje się identycznie jak zmienne $_GET oraz $_POST. Z tym wyjątkiem że one są dostępne od razu, a sesje najpierw trzeba uruchomić ręcznie. Chociaż i to nie do końca jest prawdą, bo można w konfiguracji ustawić automatyczny start sesji.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
kamilos809
post
Post #9





Grupa: Zarejestrowani
Postów: 165
Pomógł: 3
Dołączył: 2.04.2010

Ostrzeżenie: (10%)
X----


Widzę chłopaki się rozgadali a problem jak był tak jest....
Oczywiście mam plik globalny (trzymam tam połączenie z bazą, ważne funkcje itp.) i oczywiście mam tam session_start(); na samym początku pliku biggrin.gif
Go to the top of the page
+Quote Post
freemp3
post
Post #10





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


W takim razie pozostaje sprawdzić do którego momentu sesja istnieje. W kodzie który podałeś nie ma nic o sesji. Sprawdź jak wygląda zmienna $_SESSION bezpośrednio przed nim oraz za nim. Jeśli już przed nim będzie nie tak pozostaje się cofać i sprawdzać jak wygląda zmienna kilka linijek wcześniej.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
kamilos809
post
Post #11





Grupa: Zarejestrowani
Postów: 165
Pomógł: 3
Dołączył: 2.04.2010

Ostrzeżenie: (10%)
X----


cały pliczek wygląda tak:
  1. <?php include "antet.php"; include "func.php";
  2. $user=$_SESSION["user"][0];
  3. $tresc=$_POST["odpowiedz"];
  4. $temat=$_POST["temat"];
  5. $sql = "INSERT INTO forum_posty VALUES (NULL, '$tresc', '$user', '$rodzic', '$temat')";
  6. $result = mysql_query($sql, $db_id);
  7. if($result) echo'<a href="temat.php?temat='.$_POST['temat'].'">Powrót</a>';
  8. ?>

jak widać kod wiele się nie zmienia, a po cofnięciu z niego do drugiego pliku wywala sesję całkowicie :/
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no a temat.php startuje sesje?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamilos809
post
Post #13





Grupa: Zarejestrowani
Postów: 165
Pomógł: 3
Dołączył: 2.04.2010

Ostrzeżenie: (10%)
X----


Jasne smile.gif
w nim też jest includowany plik globalny, bo niestety musi...
Go to the top of the page
+Quote Post
freemp3
post
Post #14





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Jak rozumiem w momencie dodawania wpisy do bazy danych sesja jest jeszcze poprawna?
Może w pliku temat.php masz gdzieś resetowanie sesji i wkradła się literówka lub coś takiego? Więcej nie poradze bo nie wiem co znajduje się w pliku.
Możesz spróbować śledzić sesje od momentu jej wystartowania, np wyświetlając co kilka linijek i tym sposobem sprawdzisz gdzie dokładnie leży błąd.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
jackraymund
post
Post #15





Grupa: Zarejestrowani
Postów: 217
Pomógł: 21
Dołączył: 10.06.2011
Skąd: Głogów

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


Taki samy problem miałem, dlatego przed każdą funkcją startowałem sesje.
Ale z teori kolegi który mi odpowiedział na pytanie, to nie powinno mieć miejsca, a jednak mamy razem podobny problem.


Spróbowałem aby dać start session w konstruktorze jednak to nic nie dało, obiekt nie trzyma otwartej sesji.
czyli tak na szybko przedstawienie jak to wygląda
klasa.php
  1. class klasa{
  2. public function __constructor(){
  3. $_SESSION['foo'] = "bar";
  4. }
  5.  
  6. public function rysuj(){
  7. var_dump($_SESSION);
  8. }
  9. }

index.php
  1. include "klasa.php";
  2. $obiekt = new klasa;
  3. $obiekt->rysuj();


var_dump pokazuje pusty string, lecz gdy dam session_start(); przed uzyciem $_SESSION wtedy działa jak należy.

Ten post edytował jackraymund 23.08.2013, 12:59:15


--------------------
Wykonuje zlecenia na pobieranie danych ze stron i różne boty.
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
var_dump pokazuje pusty string, lecz gdy dam session_start(); przed uzyciem $_SESSION wtedy działa jak należy.
No bo jak nigdzie wczesniej nie startowales sesji to niby jakim cudem ci mialo zadzialac?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
freemp3
post
Post #17





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


@jackraymund nie __constructor() tylko __construct(). Z poprawną nazwą konstruktora śmiga aż miło.

Ten post edytował freemp3 23.08.2013, 13:11:38


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
kamilos809
post
Post #18





Grupa: Zarejestrowani
Postów: 165
Pomógł: 3
Dołączył: 2.04.2010

Ostrzeżenie: (10%)
X----


z startowaniem sesji kombinowałem już w różnych kombinacjach. Jak wyrzucało, tak nadal wyrzuca :/
Go to the top of the page
+Quote Post
jackraymund
post
Post #19





Grupa: Zarejestrowani
Postów: 217
Pomógł: 21
Dołączył: 10.06.2011
Skąd: Głogów

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


@freemp3

@nospor
Jak nie? W kontruktorze wystartowałem sesje.

freemp3 pisał że jeżeli gdzieś wystartuje sesje to reszta kodu będzie łapać ją, a nie łapie.

To co mogę jeszcze zrobić? autosession wolałbym zostawić, bo niechce włączać sesji dla każdej podstrony


@up
a wyrzuca ci jakiś błąd? podaj treść błędu

@down
2 raz powtórze to co napisałem

""czyli tak na szybko przedstawienie jak to wygląda" wiadome że odręcznie jakiś syntax mógł wpaść."
kod pisałem odręcznie i go nie uruchamiałem, ale identycznie wygląda sprawa na serwerze. Tylko że jest poprawnie bez syntaxów a konstruktor działa

Ten post edytował jackraymund 23.08.2013, 14:15:43


--------------------
Wykonuje zlecenia na pobieranie danych ze stron i różne boty.
Go to the top of the page
+Quote Post
freemp3
post
Post #20





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


kamilos809 spróbuj wystartować sesję w każdym z tych plików, na początku. Jeśli to nic nie da to spróuj ją wystartować także bezpośrednio przed linijką w której się wywala. Jeśli nadal będzie pusta to znaczy, że gdzieś jest czyszczona.

@jackraymund w konstruktorze nie wystartowałeś sesji bo był błąd w jego nazwie więc nie ma bata, żeby zadziałało. Napisałem Ci, że po poprawieniu jego nazwy wszystko działa jak należy. Czytaj ze zrozumieniem.
Po drugie to nie jest temat o tym gdzie i jak ładować sesje, tylko problem @kamilos809. Jeśli chcesz dalej ciągnąć temat to dobrze by było założyć oddzielny wątek bo tylko patrzeć jak jakiś mod sie zdenerwuje i polecą ostrzeżenia.



--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 10:23