![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Chcę stworzyć system logowania na moją stronkę. Mam jednak parę wątpliwości, które chciałbym, żebyście pomogli mi rozwiać. Chodzi o zasady używania sesji do logowania. Formularz logowania to nie problem. Chodzi mi jednak o potwierdzenie / zaprzeczenie mojemu sposobowi rozumowania. Myślę, żeby napisać funcję powiedzmy sprawdz(), ktora będzie sprawdzała zmienna sesji powiedzmy autoryzacja i zwracała TRUE jeśli $_SESSION[autoryzacja]=1 - czyli użytkownik zalogowany (haslo i nazwa zgodne z tymi w bazie). Dalej, co za tym idzie można by używać tej funkcji w dowolnym miejscu sprawdzając czy użytkownik jest zalogowany. Mam rację? Jak jednak zrobić to wszystko. Powiedzmy mam plik login.php, do którego przekazywane sa dane z formularza logowania. Jeśli haslo i nazwa uzytkownika zgadzaja sie z tymi w bazie to co... wtedy zacząć sesje za pomocą session_start? Dalej... czy sesje mają jakiś swój "okres ważności"? Jeśli tak to pewnie w nagłówku każdej strony, jeśli użytkownik jest zalogowany musiałbym "odświeżyć sesję" żeby nie wygasła, tak? Przy wylogowywaniu oczywiście session_destroy. Czy coś pominąłem? Dobrze rozumuję? -------------------- "Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 29.05.2006 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
session_start w kazdym pliku, bezwzglednie na poczatku. Potem w kazdym pliku sprawdzasz czy zalogowany jak juz mowiles.
-------------------- [gg:8166107][jid:mmatheww@jabberpl.org][mail:mat.wojcik[at]gmail.com][www: http://mwojcik.pl]
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Tzn nawet jeśli nies niezalogowany to rozpoczynać sesję? A po zalogowaniu zmieniać tylko zmienna powiedzmy $_SESSION[autoryzacja] ?
Ok, dalej... Czyli tak, w nagłowku daję session_start. teraz wiadomo, jeśli jkest zalogowany to powedzmy wartość $_SESSION[auth]=1. Jak jednak ustawić czas ważności sesji, zeby trwała powiedzmy 60 minut. Po każdym przeładowaniu strony sesja jest odświeżana. Ale powiedzmy, że ktoś się zaloguje i przez 60 minut będzie bezczynny. Jak zrobić, żeby jego sesja wygasła i po odświeżeniu strony był wylogowany? Dobrze, juz chyba wiem. Trzeba troche pobawić się ini_set. Im człowiek więcej wie tym więcej ma pytań. Na webhelp.pl znalazłem tutorial do umieszczania sesji w bazie MySQL. Czy warto się tym zając? Jaką przewagę ma umieszczanie sesji w bazie nad "zwykłym"? Ten post edytował MalyKazio 29.09.2006, 09:05:44 -------------------- "Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 0 Dołączył: 13.04.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Tzn nawet jeśli nies niezalogowany to rozpoczynać sesję? A po czym chcesz sprawdzać, czy jesteś zalogowany? Właśnie po sesji ![]() ![]() Dobrze, juz chyba wiem. Trzeba troche pobawić się ini_set. ini_set służy do ustawień jądra php - do sesji nie jest mu nic potrzebne ![]() Jak zrobić, żeby jego sesja wygasła i po odświeżeniu strony był wylogowany? W sesji przechowujesz czas ostatniej aktywności użytkownika (np. $_SESSION['last_activity'] = time(); // chodzi o wpisywanie aktualnego czasu na każdej podstronie). Na każdej stronie, zanim przypiszesz ten nowy czas, porównujesz go także z aktualnym, więc:Proste, nie? ![]() Im człowiek więcej wie tym więcej ma pytań. Na webhelp.pl znalazłem tutorial do umieszczania sesji w bazie MySQL. Czy warto się tym zając? Jaką przewagę ma umieszczanie sesji w bazie nad "zwykłym"? Generalnie pisanie własnych sesji jest o tyle lepsze, że masz pełną kontrolę nad wszystkim, co się z sesją dzieje ![]() ![]() ![]() ![]() -------------------- Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 25.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
@L_Devil: Popraw mnie jesli sie myle, ale.. jak nie bedziesz odswiezac strony powiedzmy przez 50 min, to Twoje $_SESSION['last_activity'] przyjmie wartosc NULL i dalsze sprawdzanie warunkow nie ma sensu.
Co do tematu, od czasu trwania sesji jest session.gc_maxlifetime. Domyślnie session.gc_maxlifetime = 1440 1440/60 = ok. 24 minut
A zeby sesja trwała dluzej niz sesja przegladarki stosujemy session.cookie_lifetime. Ten post edytował myth 29.09.2006, 20:30:11 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 29.09.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Cytat
Czy to czemuś ma służyć? Bo wg mnie to jest śmiechu warte... Prawidłowe przekierowanie w php z użyciem header'a:
Wielki znawaca ze mnie, hehe. To tylko mój początek ![]() -------------------- HomePage | Mój Blog | Klimek Team
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 23 Dołączył: 3.06.2006 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Chwilka... Dlaczego masz tak dziwnie header?
Nie powinno byc przypadkiem tak:(?)
Wtedy Cie przekiruje na stronę która chcesz. Nie wywala Ci komuniaktu o bledzie przy Twoim kodzie? ![]() Ps. Bez znaków "-" w adresie i bez znaku "\" na koncu (dodawany przez bbcode z forum), czyli Cytat <?php
header("Location: h-t-t-p://-tutaj_podaj_strone.pl"); ?> Ten post edytował mokry 29.09.2006, 22:24:08 -------------------- Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
No to może pokuszę się o "własną" obsługę sesji. Znalazłem gotowy wzór tu: http://php.webhelp.pl/index.php?id=116&...php&ac=read
Może ten być? Jest ok? Już nawet snuje pewne plany jego rozbudowy ![]() Mam jednak pytanie. Jeśli moglibyście zerknąć w tamten skrypt i powiedzieć mi: co jest trzymane w bazie danych w kolumnie "data"? Czy dobrze rozumuje, że są to wszystkie zapisane przeze mnie zmienne sesyjne (ma mylącą nazwę ale coż)? Cytat Wady, natomiast to: musisz przewidzieć, jakie zmienne sesyjne będą ci potrzebne (tzn. dodawanie informacji "w locie" [on-the-fly] jest znacznie trudniejsze niż w klasycznych sesjach) Dlaczego? Z tego co widzę, kod do którego link podałem wyżej umożliwia dodawanie zmiennych sesyjnych w dowolnej chwili i zostaną one zapisane. Nie za bardzo wiem co masz na myśli. -------------------- "Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 23 Dołączył: 3.06.2006 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Jeśli chcesz fajną obsługę sesji z logowaniem (gotową) ściągnij i poczytaj to:
http://mokry.bitmar.net/sesjePHP.pdf -------------------- Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Hmm... może i jest to fajne ale to wyższa szkoła jazdy...nie dla mnie. Jeszcze wiele mi brakuje do tego poziomu a nie chcę używać czegoś, czego nie rozumiem i nie za bardzo umiem sam modyfikować.
Co jest nie tak z obsługą sesji, do której link wkleiłem wyżej? Tą przynajmniej rozumiem i wiem o co chodzi ![]() -------------------- "Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 0 Dołączył: 13.04.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Lecim po kolej:
@L_Devil: Popraw mnie jesli sie myle, ale.. jak nie bedziesz odswiezac strony powiedzmy przez 50 min, to Twoje $_SESSION['last_activity'] przyjmie wartosc NULL i dalsze sprawdzanie warunkow nie ma sensu. Nie. Last_activity dotyczy tylko sesji samodzielnie tworzonych. One trwają, aż sam ich nie zakończysz - a $_TWOJA_SESJA['last_activity'] po 50 minutach będzie wynosiła obecny czas minus 50 minut ![]() Czy to czemuś ma służyć? Bo wg mnie to jest śmiechu warte... Więc skoro to twój poczatek, to nie pisz że czyiś kod jest śmiechu warty, zwłaszcza, jeżeli nie jesteś pewny. Location: jest nagłówkiem http który pobiera jako parametr docelowe miejsce przekierowania - a więc bynajmniej nie tag html, jaki próbowałeś wcisnąć Prawidłowe przekierowanie w php z użyciem header'a:
Wielki znawaca ze mnie, hehe. To tylko mój początek ![]() ![]() I, wreszcie, możemy pomóc autorowi tego wątki ![]() No to może pokuszę się o "własną" obsługę sesji. Znalazłem gotowy wzór tu: http://php.webhelp.pl/index.php?id=116&...php&ac=read data to angielskie słowo oznaczające dane Może ten być? Jest ok? Już nawet snuje pewne plany jego rozbudowy ![]() Mam jednak pytanie. Jeśli moglibyście zerknąć w tamten skrypt i powiedzieć mi: co jest trzymane w bazie danych w kolumnie "data"? Czy dobrze rozumuje, że są to wszystkie zapisane przeze mnie zmienne sesyjne (ma mylącą nazwę ale coż)? Dlaczego? Z tego co widzę, kod do którego link podałem wyżej umożliwia dodawanie zmiennych sesyjnych w dowolnej chwili i zostaną one zapisane. Nie za bardzo wiem co masz na myśli. ![]() ![]() Ten post edytował L_Devil 30.09.2006, 19:53:21 -------------------- Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat I, wreszcie, możemy pomóc autorowi tego wątki Dzięki wielkie ![]() Póki co postanowiłem wykorzystać to, co znalazłem. Musiałem tylko zmienić funkcję session_write bo był tam mały zonk polegający na tym, że w przypadku gdy dane w sesji się zmieniły nie były one napisywanie w bazie danych (pole data) tylko doklejane i tym samym robił się bajzel. Po zamianie wygląda to mniej więcej tak: Kod function session_write($id, $data) { $query = "select * from zportal_sesje where id='$id'"; $result = mysql_query("$query") or die("Nie mogę sprawdzić danych z bazy."); while($line = mysql_fetch_array($result)) { $dane = $line['data']; } if($dane != $data) { $rdata = $data; $query = "update zportal_sesje set data='$rdata' where id='$id'"; $result = mysql_query("$query") or die(BLAD . "Nie moge zaktualizowac daty sesji."); } } Mała zmiana z " $rdata = $dane . $data;" na "$rdata = $data; " -------------------- "Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 19:43 |