Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Czas trwania sesji php
elwierka
post 24.08.2010, 07:34:08
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

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


Niedawno zaczęłam naukę php i chcę wszystko pisać "ręcznie" żeby się nauczyć języka, a nie używając frameworków.

Po zalogowaniu się do aplikacji chcę, aby sesja trwała określony czas. Wiem, że ustala się to w pliku php.ini ale chodzi mi o coś innego. Chcę w pisanej aplikacji zrobić coś takiego, że osoba, która poprawnie zaloguje się do strony, może poruszać się po niej, dopóki nie minie określony czas. Poza tym chcę, aby po czasie bezczynności, np. 30 sek, sesja była niszczona, żeby nie można było przeglądać stron bez ponownego zalogowania się i najlepiej, jakby po upływie tego czasu od razu następowało przekierowanie do strony logowania. Chciałabym też, aby po wylogowaniu i wciśnięciu w przeglądarce przycisku "Przejdź do poprzedniej strony" - nie można było uzyskać dostępu poprzez ponowne przesłanie danych do skryptu. Obecnie mój skrypt logowania pozwala na to, dane są ponownie przesyłane, przez co znowu można zalogować sie do aplikacji i po niej się poruszać. Nie jest to bezpieczne.

Chcę też zrobić coś takiego, że jeśli jest się zalogowanym i np. wchodzę na stronę główną - a tu jest formularz logowania - żeby nie trzeba było za każdym razem się logować, tylko żeby aplikacja sama poznała - jeśli jest ktoś zalogowany, to przełącza do strony powitalnej itp...

Nie chcę używać ciasteczek. Czy da się to zrobić za pomocą tylko sesji? Wiem, jakie są funkcje sesji, czytałam w manualu, ale nie potrafię tego wszystkiego poskładać do kupy i stworzyć całkowitego kodu. Szukałam też gotowych rozwiązań w internecie, ale to wszystko nie było do końca takie, jak chcę.

Jak to zrobić?
Go to the top of the page
+Quote Post
thek
post 24.08.2010, 07:44:26
Post #2





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




Jeśli chcesz, by można było ze strony korzystać X czasu od momentu zalogowania, to musisz przechowywać w bazie czas zalogowania i podczas każdego przechodzenia między stronami porównywać go z aktualnym. Gdy będzie większy niż X -> wyloguj/zniszcz sesję i przekieruj na stronę logowania.

Czas życia sesji możesz określić jako jeden z jej parametrów. Uważam jednak, że 30s to bardzo mało. Czasem tyle trzeba do przeczytania kilku postów w temacie. Użytkownik szybko się zdenerwuje musząc co chwilę logować. Jeśli chodzi o wstecz, to w przypadku wylogowania i próby dostępu do tej strony, powinno zaprotestować bo będzie brak prawidłowej sesji.

Jeśli sesja istnieje to uzależniaj wyświetlanie formularza logowania od zmiennych sesyjnych. Są -> wyświetl, brak -> olej to. Można dość ogólnikowo powiedzieć, że sesja to takie zmienne globalne.


--------------------
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
marcint83
post 24.08.2010, 12:17:59
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 4
Dołączył: 24.08.2010

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


Witaj,

Da się to zrobić za pomocą sesji, w sumie najlepiej z ich pomocą to zrobić winksmiley.jpg
Mechanizm sesji samoczynnie ustawi odpowiednie ciasteczko

Na każdej stronie na której chcesz używać sesji musisz dać kod (na samej górze):
  1. ini_set('session.gc_maxlifetime', 30); //ustawienie w php.ini czasu bezczynnosci sesji na 30 sekund
  2. session_name("mojasesja");
  3. session_set_cookie_params(3600,"/",$_SERVER['SERVER_NAME']); //calkowity czas trwania sesji 3600 s


Teraz po poprawnym zalogowaniu użytkownika ustawiasz mu zmienna sesyjna np.
  1. $_SESSION['user_id']=1;


Jesli chcesz pokazac tresc tylko zalogowanym to piszesz tak:

  1. if($_SESSION['user_id']>0){
  2. //tu wpisujesz kod ktory ma byc dostepny tylko dla zalogowanych
  3. }else{
  4. //np. przekierowanie do logowania
  5. }


Zeby aplikacja "poznala" czy ktos jest zalogowany i przekierowala go na inna strona to wpisujesz:

  1. if($_SESSION['user_id']>0){
  2. header("Location: nowa_strona.php");exit;
  3. }



Powodzenia
Go to the top of the page
+Quote Post
askone
post 24.08.2010, 12:20:35
Post #4





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Hej

30s jako czas sesji to zdecydowanie zbyt mało. W niektórych systemach transakcyjnych banków długość sesji to 10 minut z jednoczesnym resetowaniem przy przeładowaniu.

Pozdrawiam


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post
elwierka
post 24.08.2010, 13:02:41
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

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


Tak, 30 sek, to był tylko przykład....myślę, że w tej aplikacji nad którą pracuję, to 10 min bezczynności zdecydowanie wystarczy. No chyba, że czas, w którym wpisuje się dane do pól formularza, też jest uważany za bezczynność, to wtedy rzeczywiście będzie za krótko smile.gif
Go to the top of the page
+Quote Post
darek334
post 16.05.2015, 15:52:49
Post #6





Grupa: Zarejestrowani
Postów: 87
Pomógł: 3
Dołączył: 23.04.2013

Ostrzeżenie: (30%)
XX---


Cytat(marcint83 @ 24.08.2010, 13:17:59 ) *
Witaj,

Da się to zrobić za pomocą sesji, w sumie najlepiej z ich pomocą to zrobić wink.gif
Mechanizm sesji samoczynnie ustawi odpowiednie ciasteczko

Na każdej stronie na której chcesz używać sesji musisz dać kod (na samej górze):
  1. ini_set('session.gc_maxlifetime', 30); //ustawienie w php.ini czasu bezczynnosci sesji na 30 sekund
  2. session_name("mojasesja");
  3. session_set_cookie_params(3600,"/",$_SERVER['SERVER_NAME']); //calkowity czas trwania sesji 3600 s


Teraz po poprawnym zalogowaniu użytkownika ustawiasz mu zmienna sesyjna np.
  1. $_SESSION['user_id']=1;


Jesli chcesz pokazac tresc tylko zalogowanym to piszesz tak:

  1. if($_SESSION['user_id']>0){
  2. //tu wpisujesz kod ktory ma byc dostepny tylko dla zalogowanych
  3. }else{
  4. //np. przekierowanie do logowania
  5. }


Zeby aplikacja "poznala" czy ktos jest zalogowany i przekierowala go na inna strona to wpisujesz:

  1. if($_SESSION['user_id']>0){
  2. header("Location: nowa_strona.php");exit;
  3. }



Powodzenia


Nie to wogóle śmieci, z was tacy programiści PHP jak z koziej dupy trąba, takie ludowe przysłowie,
absolutnie nie ustawia się niczego poprzez zmienne globalne ini to jest totalne noobostwo i lamerstwo. To taka sama głupota jakbyśmy chcieli sobie ustawić nazwę ciasteczka sesji poprzez używając funkcji ini_set('session.name') no totalna bzdura. Do tego służą inne funkcje.
Proszę sobie poczytać o nich:
http://php.net/manual/pl/function.session-name.php

Ten post edytował darek334 16.05.2015, 15:55:33
Go to the top of the page
+Quote Post
rad11
post 16.05.2015, 18:49:51
Post #7





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


Tej funkcji tez praktycznie sie nie uzywa wiec wstrzymaj sie z czasem z komentarzami tego typu wink.gif
Go to the top of the page
+Quote Post
Xelah
post 17.05.2015, 13:24:43
Post #8





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


Komentarz bezsprzecznie chamski, ale przyznać trzeba, że zaproponowane rozwiązanie wygląda jakby 'ślepy prowadził głuchego'.
Go to the top of the page
+Quote Post
darek334
post 20.05.2015, 23:36:20
Post #9





Grupa: Zarejestrowani
Postów: 87
Pomógł: 3
Dołączył: 23.04.2013

Ostrzeżenie: (30%)
XX---


Cytat(Xelah @ 17.05.2015, 14:24:43 ) *
Komentarz bezsprzecznie chamski, ale przyznać trzeba, że zaproponowane rozwiązanie wygląda jakby 'ślepy prowadził głuchego'.


smile.gif Nie dość że pomagam to jeszcze jaka wdzięczność smile.gif, dlatego nie chce się pomagać, raz że człowiek sam musiał do tych rzeczy dochodzić i za bardzo nie chce się potem tego zdradzać a dwa że po prostu czasami nie warto, tam nie zauważyłem, ale ktoś sugeruje grzebanie przy gc no to już wogóle porażka i tak dużo napisałem teraz kto ma rozum dojdzie jak to się robi...

Ten post edytował darek334 20.05.2015, 23:40:50
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 Wersja Lo-Fi Aktualny czas: 25.04.2025 - 07:49