Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Sesje czy Cookies?
Matimor
post
Post #1





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


Witajcie
Czy sesje działają na IP komputera, na którym była stawiona dana zmienna $_SESSION na ileś tam, zauważyłem ostatnio, że po jakimś czasie bodajże kilkadziesiąt minut, zmienna resetuje mi się z powrotem na Default. Jest to dla mnie bardzo ważne iż oglądający bez tego raczej nie będzie mógł swobodnie oglądać strony. Czy lepsze będzie wykorzystanie Cookies? Jeżeli tak to jak zapisać zmienna i odczytywać ją przy każdym wejściu na stronę.


--------------------
Go to the top of the page
+Quote Post
Naster
post
Post #2





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 2.08.2007

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


http://php.net/manual/en/function.setcookie.php

i

Tam masz wszelkie przykłady też winksmiley.jpg
Go to the top of the page
+Quote Post
Pawel_W
post
Post #3





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


Cytat(Matimor @ 6.01.2010, 20:30:20 ) *
Witajcie
Czy sesje działają na IP komputera, na którym była stawiona dana zmienna $_SESSION na ileś tam, zauważyłem ostatnio, że po jakimś czasie bodajże kilkadziesiąt minut, zmienna resetuje mi się z powrotem na Default. Jest to dla mnie bardzo ważne iż oglądający bez tego raczej nie będzie mógł swobodnie oglądać strony. Czy lepsze będzie wykorzystanie Cookies? Jeżeli tak to jak zapisać zmienna i odczytywać ją przy każdym wejściu na stronę.


sesje nie są na ip tylko na przeglądarkę winksmiley.jpg

działają podobnie jak ciastka, z tym wyjątkiem, że do ciastek możesz się dobrać z poziomu javascript, a do sesji nie, no i sesje wygasają po zamknięciu przeglądarki winksmiley.jpg

jak chcesz operować na sesjach to na początku dokumentu musisz dodać session_start

najlepiej wrzuć do googla php sesje i przeczytaj jakiś tutorial winksmiley.jpg
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat(Pawel_W @ 6.01.2010, 20:50:28 ) *
no i sesje wygasają po zamknięciu przeglądarki winksmiley.jpg

Bzdura, sorry winksmiley.jpg


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
Matimor
post
Post #5





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


To chyba lepiej to na ciacha zrobić, bo po zamknięciu przeglądarki to może zacząć denerwować powoli odwiedzających.


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





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Matimor... Sesję można ustawić na dowolny czas. Choćby i na rok. Tylko ustawienie tam jako czas życia 0 sprawia, że są one do czasu zamknięcia przeglądarki. każda odpowiednio duża określa do kiedy (bo jest to w zasadzie niemal nic innego niż znacznik czasu). Poczytaj o sesjach dokładnie to ci się wyjaśni. A jeszcze lepiej przejrzyj się skryptom php związanym z autoryzacją użytkowników w różnych frameworkach. Wtedy będziesz miał odpowiedni materiał do przemyśleń.

Ten post edytował thek 7.01.2010, 21:12:59


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Pawel_W
post
Post #7





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


Cytat(darko @ 6.01.2010, 20:56:16 ) *
Bzdura, sorry winksmiley.jpg

dzięki za poprawienie, o ty mnie wiedziałem wstydnis.gif
Go to the top of the page
+Quote Post
Brick
post
Post #8





Grupa: Zarejestrowani
Postów: 107
Pomógł: 9
Dołączył: 16.02.2004
Skąd: Kraków

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


Ja bym nie odsyłał kolegi do studiowania jakiś skryptów, bo nie doświadczonej osobie ciężko będzie czasem w nich się połapać. Zwłaszcza że często są mocno rozbudowane, korzystają z różnych oddzielnych funkcji itd.

Może przyda się krótkie objaśnienie:
Uruchomienie sesji w PHP powoduje zapisanie pliku cookie z identyfikatorem sesji PHPSESSID.
Istotne są tutaj dwa parametry:
1. czas życia sesji
2. czas ważności cookie

Wbrew pozorom nie oznaczają tego samego.

1. Czas życia sesji domyślnie jest ustawiony w PHP na 1440 sekund (czyli 24 minuty). Po 24 minutach bezczynności użytkownika ważność sesji wygasa, co w praktyce ma przełożenie na wylogowanie. NIE oznacza to, że sesja jest ważna 24 minuty od zapisania cookie czyli od zalogowania się, bez względu na poczynania użytkownika! Po każdym uruchomieniu session_start() czyli w praktyce kliknięciu czegokolwiek na stronie, czas liczy się od nowa.

2. Czas ważności cookie domyślnie jest ustawiony na zero. Gdy jest równy zero zamknięcie przeglądarki powoduje skasowanie pliku cookie, co w praktyce ma przełożenie na wylogowanie. Dopóki użytkownik jest na stronie - cookie jest ważne cały czas, bez limitu. Jeżeli ustawimy czas ważności cookie na np. 3 godziny to po zamknięciu przeglądarki i ponownym otwarciu strony będzie on dalej zalogowany. Ale na drugi dzień już nie.
Ten parametr warto ustawiać np na miesiąc jeżeli użytkownik zaznaczy opcję "zapamiętaj mnie" podczas logowania.
Uwaga!
Zamknięcie przeglądarki kasuje cookie, ale nie robi tego zamknięcie panelu w przeglądarce.

Oba parametry możemy zmienić za pomocą funkcji ini_set(). Odpowiednio:
Kod
1. ini_set('session.gc_maxlifetime', 3600); //czas trwania sesji ustawiamy na 1 godzinę
2. ini_set('session.cookie_lifetime',3600); //ważność cookie ustawiamy na 1 godzinę


Niestety, są serwery na których funkcja ini_set nie działa (została wyłączona przez administratora). W takim wypadku nic nie można poradzić na krótki czas życia sesji

Czym skutkuje krótki czas życia sesji?
Zależy od tego co robić może użytkownik. Np. mamy na stronie forum. Użytkownik zalogował się, zaczyna pisać bardzo długi post. Po 20 minutach odchodzi od komputera i wraca za godzinę. Kończy post i klika "zapisz". Wtedy pojawia się komunikat "nie jesteś zalogowany". Użytkownik rozbija monitor lub dzwoni do nas (wykonawcy) z epitetami.
Trzeba zatem przewidzieć taką sytuację i odpowiednio napisac skrypty żeby wyłapały taki tekst i go przywróciły. Tak jest, o ile się nie mylę, na tym forum.

Podsumowując:
Sesje są zalecane jako bezpieczniejsze, ale jeżeli chcesz mieć uniwersalny kod działający płynnie na każdym serwerze, z możliwością regulowania czasu zalogowania, to lepiej jest skorzystać z cookie.

Korzystanie z obydwu rozwiązań najlepiej zgłębić na php.net. W skrócie:
Wartości zmiennych odczytujemy z:
1. $_SESSION['zmienna'];
2. $_COOKIE['zmienna'];

a zapisujemy:
1. $_SESSION['zmienna'] = "moja wartosc";
2. setcookie("zmienna","moja wartosc",0); //czas ważności cookie to zero

Ten post edytował Brick 8.01.2010, 12:47:48


--------------------
Wszystko należy robić najprościej jak się da, ale nie prościej
Albert Einstein
Go to the top of the page
+Quote Post
Matimor
post
Post #9





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

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


Dobra zacząłem robić to na Cookies, jakoś mi na razie idzie, zrobiłem w pliku cookies.js funkcje, które ułatwiają mi posługiwanie się Cookie, teraz mam taki problem, gdy dołącze ten plik do index.php (<script language... src...></script>) to wywala mi błąd Call To undefined function[...], sprawdzałem wszystko czy jest ok (plik .js na swoim miejscu, index po zmianie wgrany) dodam, że nie działa mi żaden sposób obejścia tego shitu, jak robie tak:
  1. <a href="java script: setCookie(...);">Ustaw Cookie</a>

To nie pokazuje mi błędu nawet jak pliku nie dołącze, jak dołącze plik i zrobie tak:
  1. if(getCookie(...) != "jakistamklucz")
  2. {
  3. setCookie(...);
  4. }

To wywala mi błąd, nie ważne czy plik jest czy go nie ma, pisze Call to undefineg function getCookie, a w <a> nie pokazuje mi nic. Gdy dodam @ przed getCookie to mi strony w ogóle nie uruchamia.

Ten post edytował Matimor 8.01.2010, 17:42:08


--------------------
Go to the top of the page
+Quote Post
Brick
post
Post #10





Grupa: Zarejestrowani
Postów: 107
Pomógł: 9
Dołączył: 16.02.2004
Skąd: Kraków

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


Ale czemu używasz tu javascriptu?
To wszystko w php się robi. Oczywiście można w javascript zapisać cookie tylko po co?

Logowanie - schemat logiczny:

Kod
jeżeli wysłano formularz
{
   - wyczyść wysłane dane ze śmieci i prób "hackerskich"
   - sprawdź czy podany login i hasło są poprawne
   - komunikaty o błędach zapisz do zmiennej np $error
}

jeżeli nie wysłano formularza LUB wysłano formularz ale są błędy
{
   - jeżeli są błędy to je pokaż ($error)
   - pokaż formularz
}

jeżeli wysłano formularz I nie ma błędów
{
   - zapisz plik cookie
    proponuję zapisanie dwóch plików cookie:
    1. Unikalny ID użytkownika z bazy - setcookie("user_id",$id,0);
    2. Zaszyfrowane hasło - setcookie("pass",md5($haslo),0);
   - pokaż komunikat o zalogowaniu
}

Następnie tworzysz skrypt który sprawdza czy użytkownik jest zalogowany. Ten skrypt musi byc uruchamiany na początku, wszędzie tam gdzie dostęp ma tylko zalogowany. Skrypt zarówno sprawdza czy jest plik cookie jak i czy są w nim poprawne wartości. Pamiętaj że cookie jest na dysku usera, i każdy może próbowac przy nim manipulować.
Kod
if ($_COOKIE['user_id'])
{
    - sprawdz czy użytkownik o podanym ID istnieje w bazie
    - oraz sprawdz czy hasło z cookie zgadza się z tym z bazy
    mysql_query("select count(*) from users where id=".$_COOKIE['user_id'].' and md5(haslo)=".$_COOKIE['pass'].");
}
Jak zapytanie zwraca zero to znaczy że cookie nie pasuje i trzeba gościowi zabronić dostepu i wylogować.

Oczywiście to najprostsza wersja. Chodzi o zasadę.


--------------------
Wszystko należy robić najprościej jak się da, ale nie prościej
Albert Einstein
Go to the top of the page
+Quote Post

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: 20.08.2025 - 15:41