Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasada używania sesji do logowania.
MalyKazio
post
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ą"
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
MatheW
post
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]
Go to the top of the page
+Quote Post
MalyKazio
post
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ą"
Go to the top of the page
+Quote Post
L_Devil
post
Post #4





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Cytat(MalyKazio @ 29.09.2006, 07:59:22 ) *
Tzn nawet jeśli nies niezalogowany to rozpoczynać sesję?
A po czym chcesz sprawdzać, czy jesteś zalogowany? Właśnie po sesji smile.gif Najpierw uruchamiasz sesję -> a dopiero potem sprawdzasz, czy jesteś zalogowany winksmiley.jpg

Cytat(MalyKazio @ 29.09.2006, 07:59:22 ) *
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 smile.gif


Cytat(MalyKazio @ 29.09.2006, 07:59:22 ) *
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:
  1. <?php
  2. $dlugosc_sesji_w_sekundach = 3600; //godzinka chyba starczy, nie? :)
  3. if($_SESSION['last_activity']<time()-$dlugosc_sesji_w_sekundach)
  4. {
  5. //user nie robil nic przez godzine...
  6. header("Location: <a href="http://www.twoj-serwer.pl/strona/do/logowania/login.php");" target="_blank">http://www.twoj-serwer.pl/strona/do/logowa...gin.php");</a>
  7. }
  8. else
  9. {
  10. $_SESSION['last_activity'] = time();
  11. }
  12. ?>
Proste, nie? smile.gif


Cytat(MalyKazio @ 29.09.2006, 07:59:22 ) *
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 winksmiley.jpg A także, i to jest niezaprzeczalny bonus, masz możliwość sprawdzania, jaki użytkownik jest aktualnie zalogowany, poprzez sprawdzanie czy sesja danego użytkownika istnieje winksmiley.jpg 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) i po drugie, właśnie ta metoda jest trudniejsza od standardowych sesji... mimo wszystko się nie zrażaj - ja swoją przygodę z sesjami zacząłem od własnej sesji winksmiley.jpg Jeżeli masz jakieś pytania jeszcze, śmiało pytaj - postaramy się ci odpowiedzieć, jak będziemy umieli najlepiej smile.gif


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
myth
post
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

  1. <?php
  2. ini_set("session.gc_maxlifetime","3600"); // zmieniamy na godzine
  3. ?>


A zeby sesja trwała dluzej niz sesja przegladarki stosujemy session.cookie_lifetime.

Ten post edytował myth 29.09.2006, 20:30:11
Go to the top of the page
+Quote Post
pomek
post
Post #6





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 29.09.2006
Skąd: Bytom

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


Cytat
  1. <?php
  2. header("Location: <a href="http://www.twoj-serwer.pl/strona/do/logowania/login.php");" target="_blank">http://www.twoj-serwer.pl/strona/do/logowa...gin.php");</a>
  3. ?>


Czy to czemuś ma służyć? Bo wg mnie to jest śmiechu warte...

Prawidłowe przekierowanie w php z użyciem header'a:

  1. <?php
  2. header("Location: <a href="http://www.tutaj_podaj_strone.pl");" target="_blank">http://www.tutaj_podaj_strone.pl");</a>
  3. ?>


Wielki znawaca ze mnie, hehe. To tylko mój początek tongue.gif


--------------------
HomePage | Mój Blog | Klimek Team
Go to the top of the page
+Quote Post
mokry
post
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:(?)

  1. <?php
  2. header("Location: h-t-t-p://-tutaj_podaj_strone.pl");
  3. ?>

Wtedy Cie przekiruje na stronę która chcesz. Nie wywala Ci komuniaktu o bledzie przy Twoim kodzie? snitch.gif

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Ł" ;)
Go to the top of the page
+Quote Post
MalyKazio
post
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 smile.gif
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ą"
Go to the top of the page
+Quote Post
mokry
post
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Ł" ;)
Go to the top of the page
+Quote Post
MalyKazio
post
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 smile.gif


--------------------
"Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
Go to the top of the page
+Quote Post
L_Devil
post
Post #11





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

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


Lecim po kolej:

Cytat(myth @ 29.09.2006, 21:10:39 ) *
@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 winksmiley.jpg
Cytat(pomek @ 29.09.2006, 22:43:26 ) *
Czy to czemuś ma służyć? Bo wg mnie to jest śmiechu warte...

Prawidłowe przekierowanie w php z użyciem header'a:

  1. <?php
  2. header("Location: <a href="http://www.tutaj_podaj_strone.pl");" target="_blank">http://www.tutaj_podaj_strone.pl");</a>
  3. ?>


Wielki znawaca ze mnie, hehe. To tylko mój początek tongue.gif
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ąć winksmiley.jpg


I, wreszcie, możemy pomóc autorowi tego wątki aarambo.gif
Cytat(MalyKazio @ 29.09.2006, 23:24:07 ) *
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 smile.gif
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.
data to angielskie słowo oznaczające dane winksmiley.jpg Tak, w tej kolumnie są wszystkie stworzone przez ciebie zmienne sesyjne. Nie wgryzałem się w detale artykułu, ale wygląda na to, że spokojnie możesz coś takiego próbować. Jeżeli będziesz miał jakieś problemy - śmiało pisz. Postaram ci się wyjaśnić jak najlepiej będę umiał winksmiley.jpg

Ten post edytował L_Devil 30.09.2006, 19:53:21


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
MalyKazio
post
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 smile.gif
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ą"
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: 19.08.2025 - 19:43