Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> COOKIES i SESJE
danwal
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.06.2011

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


Witam,

Od wczoraj dość intensywnie czytam na temat cookie i sesji i chciałbym przejść do implementacji tego ale mam jeszcze jedno zasadnicze pytanie...czy po sprawdzeniu, czy użytkownik posiada ciastko na swojej jednostce mogę przypisać zmienne z bazy do zmiennych sesyjnych, np.

  1. if (isset($_COOKIE['r_user'])) {
  2. $_SESSION['_idclient_'] = 892;
  3. $_SESSION['_idsite_user_'] = 906;
  4. $_SESSION['_login_'] = 'test123';
  5. $_SESSION['_pass_'] = 'test123';
  6. $_SESSION['_host_'] = getenv("REMOTE_ADDR");
  7. $_SESSION['_lang_'] = 'pl';
  8. $_SESSION['_comm_'] = 1;
  9. $_SESSION['_comm_all_'] = 1;
  10. }


Czy jest to złe podejście? Chodzi mi głównie o zrealizowanie "rememberMe" w serwisie...

Napewno spełnia ono zadaną funkcjonalność jednak nie jestem pewien co do poprawności tego rozwiązania bo czy można w taki sposób łączyć cookie i sesje, a bardziej za pośrednictwem cookie ustawiać zmienne sesyjne? Jeśli faktycznie się mylę to czy mógłby mnie ktoś nakierować na właściwy tok myślenia jak za pośrednictwem cookie zapamiętać zalogowanego użytkownika na wszystkich podstonach serwisu, bo szczerze to bez pomocy tablicy $_SESSION nie bardzo wiem jak to rozwiązać...
Go to the top of the page
+Quote Post
IceManSpy
post
Post #2





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Wszystko jest ok tylko:
1. Nie trzymaj hasła w sesji - po co?
2. Trzymaj tam najważniejsze rzeczy - id usera , login i/lub mail chyba wystarczy...
3. Oprócz sprawdzania czy jest dane ciastko, sprawdzaj czy ma pożądaną wartość. BO jakbym teraz utworzył u siebie na kompie ciastko o nazwie r_user to wtedy zacznie mi przypisywać do zmiennych sesyjnych nieznane wartości. Zrób dodatkowo warunek, że $_COOKIE['r_user']) == 'zalogowany'
4. A tak w ogóle po co robić ciastko dla sesji? Ono się automatycznie robi na komputerze użytkownika, więc wystarczy sprawdzać czy np $_SESSION['zalogowany'] ma wartość np true, którą przypisujesz po poprawnym zalogowaniu się.

Ten post edytował IceManSpy 26.06.2011, 10:16:23


--------------------
Go to the top of the page
+Quote Post
melkorm
post
Post #3





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Cytat
Wszystko jest ok tylko:
1. Nie trzymaj hasła w sesji - po co?
2. Trzymaj tam najważniejsze rzeczy - id usera , login i/lub mail chyba wystarczy...
3. Oprócz sprawdzania czy jest dane ciastko, sprawdzaj czy ma pożądaną wartość. BO jakbym teraz utworzył u siebie na kompie ciastko o nazwie r_user to wtedy zacznie mi przypisywać do zmiennych sesyjnych nieznane wartości. Zrób dodatkowo warunek, że $_COOKIE['r_user']) == 'zalogowany'
4. A tak w ogóle po co robić ciastko dla sesji? Ono się automatycznie robi na komputerze użytkownika, więc wystarczy sprawdzać czy np $_SESSION['zalogowany'] ma wartość np true, którą przypisujesz po poprawnym zalogowaniu się.


2. W końcu trafię na istniejącą parę id_user / login / mail
3 / 4. Chodzi tutaj o to gdy już NIE ma sesji

Ogólnie wystarczy że w ciachu zrobisz sobie np:
id_user'a / hash
gdzie hash to np. md5 z id + loginu + maila + sól - ogólnie z danych user'a by zweryfikować go najlepiej jakieś unikalne dane dla użytkownika typu mail / data rejestracji itp wink.gif


--------------------
Go to the top of the page
+Quote Post
danwal
post
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.06.2011

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


Po pierwsze dzięki wielkie, a co do Twojej listy błędów:

2.,3. -> tak wiem. Przykład, który zamieściłem chciałem ograniczyć do mimimum ale skoro wspomniałeś to spytam co byś polecił umieszczać w tym cookie, bo już z milion wersji przeczytałem i reasumując wyszło, że obojętnie co by to nie było to bezpieczeństwo gwarantuje...ŻADNE (oczywiście mam na myśli ustawienie unikalnej wartości np. temp procesora zarówno w cookie jak i w bazie kojarząc ją z danym userem). Dodatkowo chciałem dodać jeszcze kolumnę BROWSER w bazie sprawdzającą przeglądarkę i jeśli wizyta byłaby z nie tej co wcześniej to przekierowywałoby do strony logowania mimo ustawionego ciastka (ma to sens czy raczej zaniechać?)

4. Ok ale jak w takim ciastku ustawić czas trwania np. na 14 dni?Bo do tego zmierzam...
Go to the top of the page
+Quote Post
melkorm
post
Post #5





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Jako przykład może posłużyć system ciastek z SMF forum, zapisuje on w bazie hasło usera w postaci sha1 i w dodatku dla każdego user'a generuje unikalną sól i wtedy hash w ciastku wygląda następująco:
  1. sha1( password + unikalna_sól );


Dość popularne jest to forum więc sądzę że jakość tego rozwiązania jest całkiem dobra wink.gif

Cytat
4. Ok ale jak w takim ciastku ustawić czas trwania np. na 14 dni?Bo do tego zmierzam...

Trzeci parametr funkcji setcookie. - lub zapisywać czas w bazie, rozwiązań jest wiele.

Ten post edytował melkorm 26.06.2011, 10:49:02


--------------------
Go to the top of the page
+Quote Post
IceManSpy
post
Post #6





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Cytat(melkorm @ 26.06.2011, 11:28:38 ) *
2. W końcu trafię na istniejącą parę id_user / login / mail
3 / 4. Chodzi tutaj o to gdy już NIE ma sesji


2. Nie trafisz, jeśli dobrze będzie zrobione logowanie. To ono się zajmie, czy są 2 takie same maile / id. Jeśli będą, tzn że źle jest zaprojektowany system rejestracji użytkowników.
3 / 4. 4 -> Faktycznie, przegapiłem słowo-klucz rememberMe smile.gif Więc z tego się wycofam smile.gif


--------------------
Go to the top of the page
+Quote Post
melkorm
post
Post #7





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Cytat
2. Nie trafisz, jeśli dobrze będzie zrobione logowanie. To ono się zajmie, czy są 2 takie same maile / id. Jeśli będą, tzn że źle jest zaprojektowany system rejestracji użytkowników.

Nie rozumiesz, znajdę INNĄ parę id użytkownika i jego mail'a - co jest o wiele bardziej prawdopodobne niż trafienie hash'a by zalogować się na innego user'a.


--------------------
Go to the top of the page
+Quote Post
danwal
post
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.06.2011

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


Hmmm...panowie to takie jeszcze jedno pytanie co do zawartości ciastka...celem unknięcia nowej kolumny w tabelii z użytkownikami nie byłoby lepszym rozwiązaniem np. umieszczanie wartości hash z bazy (w bazie oprócz prawidłowego hasła mam też jego odpowiednik hash), czyli mniej więcej coś takiego:

  1. //wcześniej wykonywane jest zapytanie pobierające info użytkownika
  2. function rememberMe($id,$pass_hash) {
  3. setcookie('_c_u','uid='.$id.'&hash'.$pass_hash,time()+360,'/','.test.dev');
  4. }


Ten post edytował danwal 26.06.2011, 15:59:25
Go to the top of the page
+Quote Post
melkorm
post
Post #9





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Nie, ale hash możesz generować z kilku wartości usera np : hasło + mail + login wink.gif id masz więc tylko porównać czy ten hash z ciacha jest równy temu który generujesz dla user'a z jego danych - żadnych nowych kolumn.

PS. Trzymasz czyste hasło użytkownika w bazie ?
PS2. Skorzystaj z serialize, łatwiej Tobie będzie.


--------------------
Go to the top of the page
+Quote Post
danwal
post
Post #10





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.06.2011

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


Kurczę bo cyba jednej rzeczy nie rozumiem...

Ok, generuje hash z danych które napisałeś czyli mail, pass, login, id, etc. i zapisuje go do ciastka. Muszę w takim wypadku też gdzieś zapisać kopię tego hashowania bo jeśli dobrze pamiętam to ciężko o taki sam wynik haszowania...czy mój tok rozumowania jest zły? Wygląda on mniej więcej tak:

Użytkownik wchodzi na stronę główną serwisu...tam w index.php jest sprawdzane czy ma ciasto, jeśli ma to jest sprawdzanie czy wartość danych z ciastka zgadza się z danymi (no właśnie?jakimi?jeśli zrobie hash taki o jakim wspomniałeś i go nigdzie nie zapiszę?), następnie jeśli jest ciaskto i porównanie danych jest pozytywne to dane są przypisywane do zmiennych sesyjnych i user bez kolejnej prośby o logowanie może poruszać się po serwisie, jeśli user kliknie wyloguj ciastko jest usuwane.
Go to the top of the page
+Quote Post
drozdii07
post
Post #11





Grupa: Zarejestrowani
Postów: 254
Pomógł: 39
Dołączył: 6.12.2010
Skąd: localhost

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


Hash możesz zapisać w bazie wink.gif Wystarczy dodatkowa kolumna..


--------------------
Wspieram akcję "jQuery i AJAX to nie język programowania"
Go to the top of the page
+Quote Post
melkorm
post
Post #12





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Cytat
Ok, generuje hash z danych które napisałeś czyli mail, pass, login, id, etc. i zapisuje go do ciastka. Muszę w takim wypadku też gdzieś zapisać kopię tego hashowania bo jeśli dobrze pamiętam to ciężko o taki sam wynik haszowania...czy mój tok rozumowania jest zły?


Hash wygenerowany z tych samych danych daje ten sam wynik - przy sha1, md5 - są też algorytmy generujące różne hashe dla tych samych danych ale to już inna bajka.


--------------------
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: 21.08.2025 - 17:28