Lord17
23.06.2008, 16:03:44
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ą ?
nospor
23.06.2008, 16:06:17
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.
Lord17
23.06.2008, 16: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

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ą
pyro
23.06.2008, 16:29:47
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

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ą

co ty pier*****
<?php
#exploit na twoje strone by pyro :)
$a = curl_init('www.twojastrona.pl/logowanie.php');
curl_setopt($a, CURLOPT_COOKIE, $cookie);
curl_setopt($a, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_exec($a);
curl_close($a);
?>
co ty gadasz o jakimś łamaniu md5 i wogóle... wyżej napisałem exploita w niecałą minutę... chyba o czymś to świadczy
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 ?
Lord17
23.06.2008, 16:34:14
session_start powiadasz ? no tak się składa, że jest wszędzie, gdzie być powinno.
wlamywacz
23.06.2008, 17:11:37
Wróżkami nie jesteśmy bo ja nie widzę tego w kodzie który podałeś.
Lord17
23.06.2008, 20:08:50
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
pyro
23.06.2008, 20:42:46
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
Lord17
23.06.2008, 21:01:42
KLIKCała funkcja odpowiedzialna za logowanie
mike
23.06.2008, 21:11:45
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.
pyro
23.06.2008, 21:15:46
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
Lord17
23.06.2008, 21:20:09
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
pyro
23.06.2008, 21:36:17
napewno dałeś wszedzie session_start? Zobacz co daje print_r($_SESSION);
Lord17
23.06.2008, 21:44:50
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?
pest
23.06.2008, 22:16:23
Ma znaczenie, że session_start() dajesz na początku skryptu, albo tuż po załadowaniu plików z klasami.
Lord17
23.06.2008, 22: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
dragonsokol
23.06.2008, 23: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
Lord17
23.06.2008, 23:18:00
Strona stoi na localhoście.
dragonsokol
23.06.2008, 23:19:21
windows czy linux? jezeli windows to xampp czy czysty apache? sprawdz folder z sesjami folder "/tmp" czy masz prawa zapisywania
Lord17
23.06.2008, 23:23:30
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.
Cytat(Lord17 @ 23.06.2008, 22:01:42 )

KLIKCał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

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ść.
Lord17
24.06.2008, 09: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.
mike
24.06.2008, 09:34:26
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ę.
Lord17
24.06.2008, 09:44:04
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.
batman
24.06.2008, 09: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.
Lord17
24.06.2008, 10:09:18
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.
batman
24.06.2008, 10:53:10
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.
Lord17
24.06.2008, 11:31:06
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.
batman
24.06.2008, 12: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
Lord17
24.06.2008, 12:32:41
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.
mike
24.06.2008, 12:34:12
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?
Lord17
24.06.2008, 12:38:55
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
mike
24.06.2008, 12:43:43
Koleś jest niepoważny. Zamknijcie ten wątek.
batman
24.06.2008, 12:44:56
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.
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.