![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Witam
Napisałem skrytp logowania do strony wykorzystujący sesje. Jest on wykorzystywany na stronie, gdzie chcę, aby w każdej chwili urzytkownik mógł wejść do swojego panelu i zmienić w nim dane lub coś napisać na innej stronie z dokonaniem podpisu. No i tutaj własie nie wiem czego urzyć. Mysłałem o dwóch wyjściach, a raczej opcjach bo żadna w 100% nie spełnia wymogów:
Wiem, że może troche zagmatwałem, ale proszę o pomoc bo nie wiem co zrobić. Mysłalem też o takim pasku na ktorym będzie na każdej stronie widniał login tylko mam srednio pomysł jak tam przesyłac dane między stronami. Chodzi o taki pasek jak jest nawet na tym forum. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 2 Dołączył: 11.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Sesja przekazuje w url, czyli adresie SID czyli session id lub można tez zapisać go do cookie które zostaje wysłane do użytkownika. Polecam ten drugi sposób. Aby zmienić to "ustawienie" możesz np. edytować php.ini. Jednak SID w cookie może być jakoś ukradziony. Warto wtedy zapamiętać np. w bazie danych dane z tablicy SERVER np. user agent i host. I sprawdzać czy są one takie same. Można również użyć session_regenerate_id() co zmniejszy szansę na kradzież sesji - poczytaj w manualu. W sesji trzymaj np user_id z bazy i sprawdzaj czy ktoś jest zalogowany bo ma id usera czy też nie.
Co do drugiego pytania to potnij www na header.php body.php footer.php a następnie za pomocną require/include (znowu manual) pobieraj je w odpowiedniej kolejności. Body zrób generowane dynamicznie, np. jeżeli brak sesji to strona logowania jeżeli sesja jest to cos innego. I teraz w header możesz dać taki pasek i on będzie w każdej stronie bo tylko body się zmienia - oczywiscie sprawdzaj czy pasek powinien być wyświetlony czyli czy w sesji sa odpowiednie dane o user id. To takie najbanalniejsze rozwiązanie. Ten post edytował Solimo 19.09.2009, 08:04:11 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
A który z tych dwóch systemów (sesje czy cookie) jest bezpieczniejszy. Bo jak tak sobie pocztalem to jednak łatwiej będzie operowac ciasteczkami bo jest to nieco prostsze, a sesje wymagają według mnie więcej zabawy. Pozatym wiele dużych serwisów korzysta z ciateczek tylko.
No ale jak z bezpieczeństwem bo to też ważne. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 231 Pomógł: 22 Dołączył: 6.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
używa się tylko sesji, ciasteczko służy do przekazywania identyfikatora sesji.
Ten post edytował fander 23.09.2009, 15:05:47 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 37 Dołączył: 1.05.2008 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Ogólnie żadna z tych metod nie jest bezpieczna jeśli sesji dodatkowo nie zabezpieczysz (np. zabezpieczenie strony przed xss, dodatkowy klucz autoryzacyjny w bazie danych, skrócony czas trwania sesji odświeżany po jakiejkolwiek aktywności użytkownika). Ogólnie sesje przekazywane przez url są w moim odczuciu mniej bezpieczne (ostatecznie wystarczy użyszkodnik z snifferem w sieci i SID już jest znany). Dodatkowo przy przekazywaniu sesji przez url nie będziecie się lubić z Google
![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Cytat używa się tylko sesji, ciasteczko służy do przekazywania identyfikatora sesji. To mi bardzo pomogło. Jednak teraz mam innego typu pytanie. Rozumiem, że sejsa (a raczej jej identyfikator) przesyłany jest w ciasteczku. W sesji zalózmy jest login i jakaś dodatkowa informacja o użytkowniku. Strona sprawdza za każdym razem czy taki identyfikator został umieszczony i go "uruchamia". Tylko teraz pytanie, skąd skrypt ma wiedzieć jaka sesja komu odpowiada bo tego jakoś jeszcze nie widze (czyli jak w cisteczku umieścić żeby zapisana była dana sesja i żeby potem skrypt sprawdzil co ma zrobić z tą sesją). |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 37 Dołączył: 1.05.2008 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
session-start, polecam przeczytanie całego działu w manualu dotyczącego sesji.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Przeglądam manuala, ale wydaje mi się, że wystarczy użyć session id (oczywiście oprocz session start). Jednak caly czas średnio rozumiem jedną rzecz.
Użytkownik loguje się do systemu, session id się tworzy. Potem wchodzi na jakąś inną stronę tego portalu jako zalogowany. Normalnie bez SID używałem GET i zmienna w adresie. Bo w tej zmiennej był np. login czy numer użytkownika, przy pomocy którego byla sprawdzana i pobierana z bazy danych reszta danych (taka jak uprawnienia). Teraz jednak nie wiem jak to zrobić bo wypiszę czy podepnę SID do zmiennej i jak sprawdzić co ta sesja zawiera, czyli jak z niej pobrać umieszczony np. login. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 37 Dołączył: 1.05.2008 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Ale jaki masz dokładnie problem? Sprawdzasz czy sesja istnieje, czy ustawione są poprawne dane, jeśli nie to przekierowujesz użytkownika na stronę logowania i dopisujesz odpowiednie dane.
Dane do sesji zapisujesz za pomocą potem odczytujesz wywołując Jeśli sesja się przedawniła (np. czas życia ciasteczka się skończył, użytkownik się wylogował) to $_SESSION['zmienna'] nie będzie istniała, np.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
No dzięki za radę sprawdzę to i dam znać.
Dobra cos tam popisałem i wyszedl mi kod:
A na stronie na która jest broniona hasłem jest taki kod: Kod który sprawdza:
Wlasciwa strona:
No i jak się loguje jako admin (czyli spełniam wszystkie wymagane warunki) to jak by nie łapie sesji i odrazu mnie wurzuca na strone błędu. Dokładniej rzecz biorąc wyświetla się hasło "logowanie specjalne zakończone sukcesem" ale potem jak używam linku do panelu admina to nie widzi już, że jestem zalogowany. Bardzo prosze o pomoc |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 37 Dołączył: 1.05.2008 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
A o session_start przed ustawieniem zmiennej sesyjnej i przed jej odczytaniem przez przypadek nie zapomniałeś?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
To tam gdzie uważałem, że powinno byc session_start to dodalem teraz:
Jednak cały czas nie działa:( |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 37 Dołączył: 1.05.2008 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Jedno session_start na początku każdego pliku przed wysłaniem jakiegokolwiek html'a....
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
No i nadal nic.
Umieściłem session_start na początku każdej ze stron (oprócz strony, która łączy się z bazą i tej na ktorej jest panel logowania) i nic nie chce działać. Caly czas jest tak jak by tracił w jakims momencie sesję i dane o użytkowniku ale nie mam zupełnie pojecia kiedy. |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 37 Dołączył: 1.05.2008 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Odpal raportowanie wszystkich błędów bo z tego co widzę to masz je wyłączone. Pamiętaj że przy logowaniu też musi być odpalona sesja.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Dobra już wszędzie uruchamiam sesje i nadal nic.
A co do tego raportowania błędów to musisz mi powiedzieć jak to zrobic bo nigdy tego nie używałem i nie weim jak to zrobić. |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 180 Pomógł: 37 Dołączył: 1.05.2008 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Błagam, trochę własnej inwencji...
Raportowanie błędów Ustaw najlepiej E_ALL i podrzuć co Ci tam php wypluwa. |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Poza tym, co to jest:
Kod if ( $fetch ) { Przy logowaniu sprawdź czy login i hasło się zgadza, jeśli tak, ustaw sesję np. $_SESSION['logowanieok'] na 1. A później w każdym pliku sprawdzaj czy takowa sesja istnieje, do tego ustaw czas trwania sesji na np. 20 minut Kod if(($_SESSION['czaslogowania']+$mozliwyczaslogowania)<time Dodatkowo możesz do sesji dopisać IP, useragenta czy jakieś losowe liczby. -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Kod Notice: A session had already been started - ignoring session_start() in /home/.../public_html/pk/includes/base.php on line 4 Notice: Undefined variable: usr in /home/.../public_html/pk/includes/base.php on line 8 Notice: Undefined variable: status in /home/.../public_html/pk/admin.php on line 6 Notice: Undefined variable: status in /home/.../public_html/pk/admin.php on line 6 No teraz mniej więcej wiem o co chodzi. Rzeczywiście jest bląd z pobraniem zmiennej status która sprawdza czy użytkownik jest zalogowany dlatego przenosi na strone błędu logowania. Czyli ogólnie nie chce pobrac żadnej zmiennej z sesji. Oto fragmenty kodu: admin:
base.php:
Możecie mi teraz coś podpowiedzieć bo cały czas chyba chodzi o to samo czyt. przekazywanie danych. |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego chcesz sprawdzać czy zmienna $status ma wartość inną niż 1 i jednocześnie inną niż 0? Nie sprawdzaj czy sesja istnieje poprzez isset, tylko sprawdź czy odpowiednia jest zawartość jaką jej nadałeś.
Ten post edytował !*! 26.09.2009, 21:26:06 -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 13:46 |