Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ciasteczko odpowiedzialne za sprawdzanie użytkownika
Forum PHP.pl > Forum > PHP
TheArt
Witajcie,

w jaki sposób użyć ciasteczek do sprawdzenia czy z forum korzysta osoba uprawniona, tzn. mam forum przed wejściem do którego trzeba wpisać hasło. Wyświetla się formularz hasła i aby pojawił się index.php trzeba wpisać poprawne hasło znane wyłacznie pracownikom. Skrypt działa ale jak się domyslacie pojawia się irytujące ponowne wpisywanie hasła przy każdym kliknięciu w index, strone główną forum itp.

Chciałem więc wprowadzić ciastko które przetrzymywałoby przez określony czas że aktualny użytkownik wpisał już hasło. Wstawiłem więc odpowiednią funkcję i owszem zadziałało, ciastko było przez 10 minut a po tym czasie wyskakiwał ponownie formularz z prośbą o hasło (gdyby np ktoś zostawił komputer to osoba postronna po 10 minutach musiałaby wpisać hasło). Do dziś myslałem że to działa ale jeden z pracowników donióśł mi że ponownie hasła wpisywać nie musi, wystarczy że klika w przycisk zaloguj i forum się pojawia.

Prawdopodobnie skrypt z hasła sprawdza czy istnieje ciasteczko, mimo że się przeterminowało to wpuszcza na forum, jak to poprawić albo znacie jakiś sposób jak automatycznie co zadany okres czasowy przenosić do wpisywania hasła. Dzieki.

Wklejam skrypcik odpowiedzialny za hasło:

  1. if (isset($_POST['submit_pwd'])){
  2. $pass = isset($_POST['passwd']) ? $_POST['passwd'] : '';
  3.  
  4. if ($pass != $Password) {
  5. showForm("Wrong password");
  6. exit();
  7. }
  8. } else {
  9. showForm();
  10. exit();
  11. }


Formularz wpisania hasła wywołuję przez:
  1. if(isset($_COOKIE['job'])) {
  2.  
  3. }
  4. else {
  5. require_once('jobhaslo.php');
  6. }


Ciastko job tworzyłem po wpisaniu hasła:

  1. } else {
  2. setcookie("job", "1", time() + 600);
  3. showForm();
  4. exit();
  5. }


Sposób ten jednakże nie działa i wystarczy jak wspomniałem kliknąć przycisk login bez wpisywania hasła, prawdopodobnie źle tworzę cookies.

W dokumentacji czytam że
Ciasteczko musi być wysłane zanim jakiekolwiek inne nagłówki zostaną wysłane.
Czyli trzeba je ustawić przed HEAD? Więc jak mam je uzależnić od wpisania hasła? Być może trzeba je stworzyć a później nadać wartość a przed formularzem hasła sprawdzić nie to czy istnieje ale jaką ma wartość, napiszcie jak Wy byście to zaprogramowali.
nospor
Wyrzuc wpizdu caly ten mechanizm bo jest o kant 4 liter.... Ciastko moze stworzyc sobie kazdy i to bez Twojego skryptu.

Autoryzacja ma byc oparta o sesje a nie ciastko.
TheArt
A miałbyś chwilę żeby mi napisać jak to wykonać na sesjach.
nospor
http://lmgtfy.com/?q=php+sesja+autoryzacja

ps: swoją drogą czemu bierzesz sie za pisanie forum pracowniczego nie mając o tym zielonego pojecia? Nie zdążyles uciec przed korytarzową łapanką czy sam sie wyrwales na ochotnika?
TheArt
Napisałem na forum aby otrzymać konkretną pomoc, nie sarkazmy. W dobrym tonie jest się nie udzielać jeśli nie chce się pomóc, wówczas nie ryzykujemy wystawiania się na śmieszność albo uznania za hejtera.

Poproszę o pomoc kogoś kto ma ochotę podzielić się wiedzą.
nospor
Cytat
W dobrym tonie jest się nie udzielać jeśli nie chce się pomóc,
Przeciez ci pomoglem... Napisalem wyraźnie,  że to co zrobiłeś jest do niczego i że należy to poprawić. Podałem ci nawet jakie masz zastosowac rozwiązanie i linka do "dokumentacji", która wyjasnia wiele rzeczy i podaje przykłady. A przy okazji z ciekawosci zapytalem się, czemu to piszesz. Tak ciezko odpowiedziec? Z twojego posta wynika, że jest to jakieś forum pracownicze i bardzo mnie interesuje w jaki sposób wybierane są osoby do pisania czegoś takiego.
TheArt
Już mówię, znam się na pisaniu stron ale dotąd nie miałem do czynienia z sesjami i ciastkami dlatego pytam bardziej doświadczonych. Kiedyś programowałem w C i często patrzę na PHP jak na C, myslałem że mogę stworzyć zmienną i zmieniać jej wartość a później sprawdzić przez if(). W firmie jestem właścicielem i chciałem stworzyć forum dla działu sprzedaży.

W ciasteczkach tworzy się nazwa ciastka, wartość, czas trwania. Czy mogę np. stworzyć ciastko hasło i nadać mu wartość 1 jak hasło zostanie wpisane a np. 0 jak wpisano je błędnie bądź nie wpisano. Wówczas w indexie sprawdzałbym jedynie jego wartość ale jak, znam jedynie funkcje sprawdzającą czy ciastko istnieje. Drąże te ciastka bo lubie jak coś zrozumiem i będę w przyszłości wiedział jak to działa, proszę o rozwikłanie tej tajemnicy.
nospor
Podalem ci linka, gdzie masz opisane jak dziala autoryzacja na sesjach. Czemu się z nim nie zapoznasz? W razie konkretnych problemow chetnie pomozemy.

ps: dziekuje za zaspokojenie ciekawosci smile.gif
Forti
Jak na moje oko to nospor Ci podał link i wyjaśnił co masz zrobić smile.gif Gotowca nikt nie napisze..
nospor
Tu jeden z lepszych linkow na tamtej stronie co ci podalem.
http://webhosting.pl/Jak.zrobic.w.PHP.system.logowania
musisz tylko dorobic sprawdzanie wlasnego hasla, bo tam jest na bazie,a ty chyba tego nie masz w bazie. Ale cała idea jest pokazana jak to ma wygladac
TheArt
Twój link mam już zapisany i będę go analizował ale chciałem najpierw dojść dlaczego nie działają mi te ciasteczka. Dlaczego nie sprawdza czy wpisano hasło.

Index sprawdza czy istnieje ciasteczko, jeśli nie to wyświetla stronę z prośbą o hasło (to istotne że nie ma być logowanie przez nazwę użytkownika ale samo hasło). Więc dlaczego ten formularz przepuszcza bez wpisania hasła, jak ze skryptu usunę tworzenie ciastka to działa normalnie, tzn. nie przepuszcza i trzeba wpisać hasło. Ależ mnie to nurtuje.
nospor
NIe pokazales do czego odnosi sie ten ELSE
} else {

setcookie("job", "1", time() + 600);

showForm();

exit();

}
wiec trudno nam zgadywac.... Pokaz caly kod a nie wyrwane z konktekstu kawalki, pokaz formularz, to bedzie o czym pogadac. Moze ty prowadzisz forum wrozbiarskie, ale my nie wink.gif
TheArt
Fixed. Przez moje programistyczne przyzwyczajenia ustanawiałem zmienną w ifie a w PHP trzeba to zrobić po funkcji.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.