![]() |
![]() ![]() |
![]() |
![]()
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ę. -------------------- |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 2.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka 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ę. sesje nie są na ip tylko na przeglądarkę ![]() 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 ![]() jak chcesz operować na sesjach to na początku dokumentu musisz dodać session_start najlepiej wrzuć do googla php sesje i przeczytaj jakiś tutorial ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
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.
-------------------- |
|
|
![]()
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
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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 |
|
|
![]()
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:
To nie pokazuje mi błędu nawet jak pliku nie dołącze, jak dołącze plik i zrobie tak:
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 -------------------- |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 15:41 |