Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter]Pytanie o sesje i problem z cookies.
Forum PHP.pl > Forum > PHP > Frameworki
adbacz
Zrobiłem skrypt do logowania i z pomocą przyszły mi klasy Session z CI. Teraz sobie czytam o sesjach, że są robione po stronie serwera (odwrotnie niż ciastka - user-side).

Takie coś pisze w Class Session w UserGuide:
Cytat
Note: Cookies can only hold 4KB of data, so be careful not to exceed the capacity. The encryption process in particular produces a longer data string than the original so keep careful track of how much data you are storing.


Najpierw czytam, że są to ciastka po stronie usera (w UG) a teraz, że sesja jest po stronie serwera. Jak to wreszcie jest z tą sesją?
phpion
Dane sesji trzymane są na serwerze, a identyfikator sesji w ciasteczku po stronie użytkownika. Dzięki niemu można rozpoznać która sesja należy do którego użytkownika.
adbacz
Dzięki za wyjaśnienie.
-------
Żeby nie pisać nowego tematu. Chciałem oprzeć system logowania na ciastkach. Dodatkowo napisać funkcje, która będzie sprawdzała czy ktoś jest zalogowany czy nie i zwracała boolean TRUE lub FALSE.

Wszystko ładnie popisałem, funkcja działała, tylko nie wykrywała ciastka. A wiedząc, że istniało, napsiałem w czystym pliku php wszystko to samo i wrzuciłem na serwer. Okazało się, że to co było w pliku, działało bez zastrzeżeń.

Klasa wygląda tak:
  1. function sprawdz() {
  2. if(!isset($_COOKIE['test'])) {
  3. return FALSE; }
  4. else {
  5. return TRUE; }
  6. }


I w miejscu gdzie chciałem to zasotować napisałem:
  1. if($this->logowanie->sprawdz() == FALSE) {
  2. echo 'FALSE'; }
  3. else {
  4. echo 'TRUE'; }


Okazało się, że to co napisałem działało prawidłowo, ale nie wykrywało ciastka o takiej nazwie (działało, bo po zamianie TRUE na FALSE i odwrotnie w funkcji całość zmieniało wynik). A jak napisałem to wszystko w jednym, osobnym pliku, bez kożystania z FW działało prawidłowo. Robię gdzieś jakiś błąd?
qrooel
W CI ciasteczka są popsute, że tak powiem, rób najlepiej na sesjach.

Kiedyś coś tam robiłem z ciastkami i miałem problemy, gdzieś wyczytałem, że mają bugi, ale systemik autoryzacji/autentykacji na sesjach działa bardzo dobrze. smile.gif
adbacz
Dzieki qrooel za wyjaśnienie. Teraz przynajmniej wiem na czym stoje smile.gif

BTW, sesje to trochę liche rozwiązanie bo wystarczy wyłączenie przeglądarki i juz nie jest się zalogowanym. Ale trudno, będzie trzeba coś pomysleć.

Dzięki za info.
IceManSpy
Wystarczy że ustawisz żywotność ciasteczka na dłużej. Np na tym forum nie muszę się logować co każde otworzenie przeglądarki, bo ciastko jest cały czas zapisane.
adbacz
No dobrze, ciastka może i dam rade zwiększyć żywotność a co z sesją?

A może nawet i lepiej, że sesja tak działa. Teraz tak myślę, że jak dojdzie co do czego, to przecież jakieś ciacho można przechwycić i robić na nim co się chce. Z sesją, która jest po stronie serwera juz tak się nie da. Wydaje mi się to bardziej bezpieczne.

Na prawde bezpieczniejsze czy tylko mi się wydaje?
szok
Logowanie na ciastkach to się robiło z 10 lta temu. Nikt teraz nawet nie pomyśli o budowaniu logowania na ciastkach.

W CI jak i w PHP masz ustawianie czas sesji.
w application/config.php
wpis:
  1. $config['sess_expiration'] = 7200;


PS: NIGDY W ŻYCIU NIE OPIERAJ LOGOWANIA TYLKO NA CIASTECZKACH!

Proponuje użyć jakiegoś gotowego systemu rejestracji/logowania użytkowników:
http://codeigniter.com/wiki/Category:Libra...Authentication/

Tam wiadomo że jest w miare bezpiecznie jak kilku programistów nad tym siedziało.
Ogólnie biblioteki do CI maja dość dobrą opinie jeśli chodzi o bezpieczeństwo.
adbacz
No dobrze, to na czym oprzeć logowanie jak nie na ciastkach? Na sesji.

Poczytałem troche tamte artykuły ale znając siebie to dłużej mi zajmie przyswojenie tych skryptów co tam są i użycie ich do swoich potrzeb niż napisanie czegoś nowego.

Szok, więc na czym jeszcze powinienem opierać system logowania? zapisywać SessionID w bazie dla danego loginu w osobnej tabeli? Tworzyć sesje tylko i wyłącznie takie, które będą istnieć do wyłączenia przegądarki? Zapisywać unikalny ciąg znaków (login, haslo, adresIP, godzinę i to wszystko w md5 lub sha1) dla danego usera w bazie danych i w sesji i dla sprawdzenia czy jest zalogowany, porównywać te dwa ciągi?

Serio, ja juz sie trochę pogubiłem jak to najlepiej napisać. Sprawdzałem już nawet na niektórych portalach co zapisują w ciastkach, żeby mieć jakieś minimalne wyobrażenie jak Oni mogą to robić.

PS.
Wiem, że jestem namolny, i wiem, że może lepszym wyjściem byłoby wzięcie jakiegoś innego roziązania ale ja już tak mam, że wolę napisać coś sam niż brać czyjeś "wypociny" i znich korzystać.
szok
Zrób to tak

Po poprawnym zalogowaniu zapisujesz w sesji informacje:
Czy użytkownik jest zalogowany
Jakieś dane typu: login, Imie, broń boże hasło tongue.gif nawet w formie zaszyfrowanej.

i wtedy masz kod:
  1. $this->session->set_userdata('zalogowany', TRUE);
  2. $this->session->set_userdata('uzytkownik', Array('login'=>$login, 'imie'=>$imie));


I potem przy sprawdzaniu logowania sprawdzasz:

  1. if($this->session->userdata('zalogowany'))
  2. {
  3. $user = $this->session->userdata('uzytkownik');
  4. echo 'Witaj zalogowany uzytkowniku' . $user['login'] .' Twoje imie to:' . $user['imie'];
  5. }
  6. else
  7. {
  8. echo 'nie jestes zalogowany';
  9. }


Opcja wylogowania to poprostu usuwasz z sesji te dane, lub niszczysz cała sesję.
  1. clas .. blebleble
  2. i masz:
  3. function wyloguj()
  4. {
  5. $this->session->unset_userdata('zalogowany');
  6. $this->session->unset_userdata('uzytkownik');
  7. redirect('/' 'refresh');
  8. }


Lub poprostu:

  1. $this->session->sess_destroy();


Cytat(adbacz @ 12.05.2011, 11:37:31 ) *
PS.
Wiem, że jestem namolny, i wiem, że może lepszym wyjściem byłoby wzięcie jakiegoś innego roziązania ale ja już tak mam, że wolę napisać coś sam niż brać czyjeś "wypociny" i znich korzystać.


No i to jest podejście jakiś 80% koderów PHP (tych niedoświadczonych), A metoda DRY?
http://pl.wikipedia.org/wiki/DRY
To raz, a dwa, po co wymyślać kolo milion razy na nowo skoro ktoś już to zrobił? Jak są dobre biblioteki nie nazwał bym tego wypocinami, kod może napisać świetnej klasy programista, sprawdzony przez wiele innych programistów.
Do tego piszesz stronę w frameworku CodeIgniter i to jest to samo, bo korzystasz z "wypocin" firmy ellislab i programistów którzy tworzą wspólnie ten projekt. Tam już jest masa kodu która jest napisana i ty z niego korzystasz.

Zmięcie swoje podejście do programowania, bo dzięki takim podejścia potem ludzie piszą różne głupoty o programistach PHP, choć właśnie przez takie zachowania oni maja rację.... .

Pozdro. Nie chciałem nikogo urazić, a tylko uświadomić.
adbacz
Z tym co napisałeś, żeby w sesji zapisać czy użytkownik jest zalogowany to już tak robiłem, jesli jest wartość 1 to zalogowany - jeśli 0 lub brak, wylogowany. No ale i tak, oprócz tego musiałbym dać coś jeszcze, bo przecież takie informacje można zmienić.

Ale chwila, przecież to sesja...

PS.
Zrobiłem coś takiego. Główny kod llogowania:
  1. function loguj() {
  2. $this->load->library('logowanie_lib');
  3.  
  4. $login = $this->input->post('login');
  5. $haslo = $this->input->post('haslo');
  6.  
  7. $zapytanie = $this->db->query("SELECT * FROM user_admin WHERE login = '".$login."'");
  8. foreach($zapytanie->result() as $i) {
  9. $user_id = $i->user_id;
  10. $haslo_db = $i->haslo;
  11. }
  12.  
  13. $hash = md5(sha1($login.$this->input->ip_address().date("His")));
  14.  
  15. $this->db->query("UPDATE user_admin SET sesja = '".$hash."', last_ip = '".$this->input->ip_address()."' WHERE user_id = ".$user_id."");
  16.  
  17. $this->session->set_userdata(array('user_id' => $user_id, 'pass' => $hash));
  18.  
  19. if($this->logowanie_lib->sprawdz() == TRUE) {
  20. echo 'jesteś zalogowany';
  21. }
  22. elseif($this->logowanie_lib->sprawdz() == FALSE) {
  23. echo 'Nie jestes zalogowany';
  24. }
  25. }


I biblioteka Logowanie_lib.php:
  1. function sprawdz() {
  2. $CI =& get_instance();
  3.  
  4. $pass = $CI->session->userdata('pass');
  5. $user_id = $CI->session->userdata('user_id');
  6.  
  7. $zapytanie = mysql_query("SELECT last_ip FROM user_admin WHERE user_id = ".$user_id."");
  8. while($wiersz = @ mysql_fetch_row($zapytanie)) {
  9. $ip_address_db = $wiersz[0];
  10. }
  11.  
  12. $ip_address_cookie = $CI->input->ip_address();
  13.  
  14. if($pass == 0 || $user_id == 0 || $ip_address_db != $ip_address_cookie) {
  15. return FALSE;
  16. }
  17. if($pass != 0 && $user_id != 0 && $ip_address_db == $ip_address_cookie) {
  18. return TRUE;
  19. }
  20. }


Działa dobrze, tylko, że to i tak po wyłączeniu przeglądarki wszystko się "refresh" i już nie jestem zalogowany.

To zapisywanie userID oraz ciągu znaków pod nazwą pass wziąłem z pewnego portalu znanego. Zauważyłem, że po zmianie obojętnie którego jestem automatycznie wylogowany więc uznałem, że to dobrze rozwiązanie. Tylko tak, mimo, że wyłącze przeglądarkę - nadal jestem zalogowany.
szok
OK przyj żyjmy się twojemu programowi:

Cytat(adbacz @ 12.05.2011, 14:10:00 ) *
Z tym co napisałeś, żeby w sesji zapisać czy użytkownik jest zalogowany to już tak robiłem, jesli jest wartość 1 to zalogowany - jeśli 0 lub brak, wylogowany. No ale i tak, oprócz tego musiałbym dać coś jeszcze, bo przecież takie informacje można zmienić.

Ale chwila, przecież to sesja... questionmark.gifquestionmark.gifquestionmark.gif?

PS.
Zrobiłem coś takiego. Główny kod llogowania:
  1. function loguj() {
  2. $this->load->library('logowanie_lib');
  3.  
  4. $login = $this->input->post('login');
  5. $haslo = $this->input->post('haslo');
  6.  
  7. $zapytanie = $this->db->query("SELECT * FROM user_admin WHERE login = '".$login."'");
  8. [color="#FF0000"]Sprawdz logowanie, po samym loginie? a hasła zadnego juz nie sprawdzasz? to po co one jest? Wystarczy ze znam login i juz jestem zalogowany
  9. petla foreach, nie wiem co chcesz tutaj robić, przecież szukasz jednego jedynego rekordu z użytkownikiem, a a nie kilku?
  10. [/color]
  11. foreach($zapytanie->result() as $i) {
  12. $user_id = $i->user_id;
  13. $haslo_db = $i->haslo;
  14. }
  15.  
  16. $hash = md5(sha1($login.$this->input->ip_address().date("His"))); [color="#FF0000"]Rozumiem że to ma być identyfikator sesji? date his, bedzie troche za słabe ... ogólnie po co skoro, PHP sam zapisuje SESSID[/color]
  17.  
  18. $this->db->query("UPDATE user_admin SET sesja = '".$hash."', last_ip = '".$this->input->ip_address()."' WHERE user_id = ".$user_id."");
  19. [color="#FF0000"]Tutaj rozumiem że zapisać adres ip, cały czas nie wiem po co pole "sesja" i zapis do niej tego hashu, który i tak tutaj praktycznie Nic Ci nie daje. [/color]
  20.  
  21. $this->session->set_userdata(array('user_id' => $user_id, 'pass' => $hash));
  22. [color="#FF0000"]Nie zapisuj hasła w sesji! [/color]
  23.  
  24. if($this->logowanie_lib->sprawdz() == TRUE) {
  25. echo 'jesteś zalogowany';
  26. }
  27. [color="#FF0000"]Ok, sprawdzasz czy jest zalogowany TRUE, a zaraz potem sprawdzasz czy ma false, przecież jeżeli niema TRUE to: Może być false, może byc null, może zmiennej w ogóle nie być.
  28. wystarczy if (zalogowany) else 'ok to nie'[/color]
  29. elseif($this->logowanie_lib->sprawdz() == FALSE) {
  30. echo 'Nie jestes zalogowany';
  31. }
  32. }


I biblioteka Logowanie_lib.php:
  1. function sprawdz() {
  2. $CI =& get_instance();
  3.  
  4. $pass = $CI->session->userdata('pass');
  5. $user_id = $CI->session->userdata('user_id');
  6.  
  7. [color="#FF0000"]Co tu robi MYSQL_QUERY? , ogołnie po co to zapytanie? [/color]
  8. $zapytanie = mysql_query("SELECT last_ip FROM user_admin WHERE user_id = ".$user_id."");
  9. while($wiersz = @ mysql_fetch_row($zapytanie)) {
  10. $ip_address_db = $wiersz[0];
  11. }
  12. [color="#FF0000"]questionmark.gifquestionmark.gif? Tutaj to ja już nic nie rozumie, dajesz zapytanie o ostatni adres IP, aby zaraz pobrać aktualny, podczas gdy przy logowaniu zapisujesz własnie ten aktualny adres IP[/color]
  13. $ip_address_cookie = $CI->input->ip_address();
  14.  
  15. if($pass == 0 || $user_id == 0 || $ip_address_db != $ip_address_cookie) {
  16. return FALSE;
  17. }
  18. if($pass != 0 && $user_id != 0 && $ip_address_db == $ip_address_cookie) {
  19. return TRUE;
  20. }
  21.  
  22. [color="#FF0000"]Przecież tu wyżej wystarczy tylko return $this->session->userdata('zalogowany');
  23. [/color] }


Działa dobrze, tylko, że to i tak po wyłączeniu przeglądarki wszystko się "refresh" i już nie jestem zalogowany.

To zapisywanie userID oraz ciągu znaków pod nazwą pass wziąłem z pewnego portalu znanego. Zauważyłem, że po zmianie obojętnie którego jestem automatycznie wylogowany więc uznałem, że to dobrze rozwiązanie. Tylko tak, mimo, że wyłącze przeglądarkę - nadal jestem zalogowany.


Jak Ci to działało to ja jestem na prawdę pod wrażeniem, i się dziwie że PHP taki kod w ogóle wykonał.

Przykład szybkiego logowania, pisany na szybko, więc mogą być błędy, no i brakujemy modeli, zapytania są w kontrolerze. I nie sprawdzałem czy ten kod działa. Jak nie działa to rozkmiń jak go uruchomić.

  1. <?php
  2. class Users extends CI_Controller {
  3.  
  4. public function index()
  5. {
  6. $data['error'] = Null;
  7. $this->load->library('form_validation');
  8.  
  9. $this->form_validation->set_rules('username', 'Username', 'required');
  10. $this->form_validation->set_rules('password', 'Password', 'required');
  11.  
  12.  
  13. if ($this->form_validation->run() == TRUE)
  14. {
  15. $this->load->helper('security'); // do_hash() helper
  16.  
  17. $this->db->select('user_id, userame, password, name');
  18. $this->db->where('username', $this->input->post('username'));
  19. $this->db->where('password', do_hash($this->input->post('password')));
  20. $user = $this->db->get('users')->result_array();
  21.  
  22. if(count($user) == '1')
  23. {
  24. $this->session->set_userdata('user_login', TRUE);
  25.  
  26. unset($user['0']['password']); // nie przechowujmy hasła w sesji
  27.  
  28. $this->session->set_userdata('user', $user);
  29. $this->db->where('user_id', $user['0']['user_id']);
  30. $this->db->update('users', Array('adres_ip', $this->input->ip_address()));
  31. // nie powninem pisac zapytan w controlerze, tylko w modelu, ale pisze to na szybko.
  32. reidrect('users/profile', 'refresh');
  33. }
  34. else
  35. {
  36. $data['error'] = 'Podales zly login lub haslo';
  37. }
  38. }
  39.  
  40. $this->load->view('tutajwidok logowania', $data);
  41.  
  42. }
  43.  
  44. public function profil()
  45. {
  46. // Sprawdzanie czy jest zalogowany to:
  47. if($this->session->userdata('user_login'))
  48. {
  49. $data['user'] = $this->session->userdata('user');
  50. $this->load->view('users/konto itp');
  51. }
  52. else
  53. {
  54. // nie zalogowany to wypad
  55. redirect('users', 'refresh');
  56. }
  57. }
  58.  
  59. public function logout()
  60. {
  61. $this->session->sess_destroy();
  62. redirect('/users', 'refresh');
  63. }
  64. }
  65.  


Jak to Ci nie pomoże to proponuje powrót do podstaw PHP i przeczytać kilka razy a potem brać się za framework.

Logowanie na sesji zawsze musi się kiedyś skończyć, w zależności od czasu jaki masz ustawiony w konfiguracji, ale zazwyczaj po restarcie przeglądarki sesja już zanika. Więc jedyne przetrzymanie tego to wrzucenie dopiero ciasteczka do klienta, i potem przy ponownym wejściu na podstawie tego ciasteczka dopiero zalogować użytkownika ponownie tworząc nową sesję.


Brakuje konstruktora w controlerze smile.gif
adbacz
*Tak ogólnie rzecz biorąc, to tam nawet nie napisałem porównania czy hasło w bazie i z formularza jest takie same. Miałem zamiar stąd to zapytanie do bazy.
*Dlaczego pole sesja? Żeby porównać ostatni zapis w bazie z aktualnym w ciastku.
*Nie zapisuję hasła w sesji - została tylko nazwa pass.
*Tak, identyfikator sesji, przy okazji miałbyć zapisywany w bazie, dla porównania. Wiem, że jest session_id, ale ta zmienia się co jakiś czas.
*masz racje, mój błąd z tym sprawdzaniem czy jest FALSE w sprawdzeniu logowania
*zapytanie w helperu by porównać ostatnie i aktualne IP.


Ok, zaznajamiam się z PHP od 2 miesięcy a Ty mi takie pomyłki wynajdujesz smile.gif

Chyba faktycznie będę musiał sie troche podszkolić jeszcze. Co do tego wykonania, teraz nie wykona - niepotrzebnie go "obkomentowałeś" wink.gif

Wziąłem tyle różnych rzeczy do sprawdzania przy logowaniu bo przeglądałem ciastko, które CI zapisuje w przeglądarce i to wszystko co ja robię na sesji jest tam zapisywane, więc pomyslałem, że jeśli będę się opierał tylko na This->session->userdata('zalogowany') == TRUE, to moge mieć później problemy.

Wybacz moją niekompetencje ale co do sesji i ciastek a tym bardziej kwestii logowania to jak widać noga totalna jestem. Dlatego też piszę tutaj, żeby ktoś wyłapał moje błędy i żebym sie poprawił.
szok
Tu chodzi o to abyś zrozumiał jak to działa.

Mój kod się wykona jak dodasz konstruktor do kontrolera i będziesz miał taka bazę danych.

Widać po prostu że w sieci jest mnóstwo kodu PHP który praktycznie nie nadaje się do niczego, to samo jest w kursach. Totalna porażka ... I potem CI ludzi uczą kolejnych jak coś się robi, skoro to powinno wyglądać inaczej.

Najlepsza metodą na naukę jest czytanie cudzego kodu. Ale cudzego w sensie musi być to dobry kod abyś miał dobre nawyki.
Zobacz jak wyglądają źródła frameworków typu: Kohana, CodeIgniter, Zend Framework, Symfony Przeanalizuj sobie, następnie przeanalizuj ich biblioteki np: właśnie do logowania i zobacz jak oni to rozwiązali. Wtedy się wiele nauczysz, przede wszystkim dobrych nawyków i jak takie rzeczy powinny być rozwiązane. No i przede wszystkim PHP w wersji obiektowej, jak to działa itp.

Pozdro smile.gif
adbacz
Dziękuje za wyjaśnienie. Wiem na czym stoje.

Jeszcze jedno pytanie. Czy jeśli jest dane w sesji takie coś:
  1. $this->session->set_userdata(array('user_id => $user_id, 'zologowany' => TRUE));


to czy jest możliwe, żeby ktoś, kto przechwcił ciastko ci_session, mógłby go tak spreparować, żeby na innym komputerze być zalogowanym?

Pytam bo nadal nie znalazłem odpowiedzi na to pytanie a bardzo mnie nurtuje. Jak bardzo to jest bezpieczne, i czy w ogóle.
szok
Niema idealnych zabezpieczeń.
PHP ma to do siebie że sam każe Ci się zabezpieczyć, w CodeIgniterze rozwiązane jest to tak:

  1. $this->userdata = array(
  2. 'session_id' => md5(uniqid($sessid, TRUE)),
  3. 'ip_address' => $this->CI->input->ip_address(),
  4. 'user_agent' => substr($this->CI->input->user_agent(), 0, 50),
  5. 'last_activity' => $this->now
  6. );


To jest przy każdej sesji zapisywane w ciasteczku, i potem przy ponownym wejściu weryfikowane.

Jak korzystasz z frameworka, nie musisz się o to martwić, tylko korzystać z klas dostarczonych przez framework, Wtedy będzie bezpiecznie, choć jak wiadomo nigdy w 100% bo tak się po prostu nie da.
adbacz
Ok, wziąłem to co napisałeś, zmodyfikowałem pod swoją baze i troszkę zmieniłem. Dodatkowo dodałem helper, aby sprawdzał czy jest ktoś zalogowany.

Logowanie:
  1. function loguj() {
  2. $this->load->library('logowanie_lib');
  3.  
  4. $login = $this->input->post('login');
  5. $haslo = $this->input->post('haslo');
  6.  
  7. $this->form_validation->set_rules('login', 'Login', 'required');
  8. $this->form_validation->set_rules('haslo', 'Hasło', 'required');
  9.  
  10. if($this->form_validation->run() == TRUE) {
  11.  
  12. $haslo = md5(sha1($haslo.$login));
  13.  
  14. $this->db->select('user_id, login, haslo');
  15. $this->db->where('login', $login);
  16. $this->db->where('haslo', $haslo);
  17. $user = $this->db->get('user_admin')->result_array();
  18.  
  19. if(count($user) == '1') {
  20.  
  21. unset($user['0']['password']);
  22.  
  23. $this->session->set_userdata(array('user_id' => $user['0']['user_id'], 'zalogowany' => TRUE));
  24.  
  25. $this->db->query("UPDATE user_admin SET `last_ip` = '".$this->input->ip_address()."' WHERE `user_id` = '".$user['0']['user_id']."'");
  26.  
  27. header('HTML/1.1 301 Moved Permanently');
  28. }
  29. else
  30. {
  31. header('HTML/1.1 301 Moved Permanently');
  32. header('Location: http://localhost/');
  33. }
  34. }
  35.  
  36. }

I helper:
  1. function sprawdz() {
  2. $CI =& get_instance();
  3.  
  4.  
  5. if($CI->session->userdata('zalogowany') == TRUE) {
  6. return TRUE;
  7. }
  8. else {
  9. return FALSE;
  10. }
  11. }


To wystarczy, czy warto jeszcze coś dodać?
szok
No ok, tylko mała rada:
  1. header('HTML/1.1 301 Moved Permanently');
  2. header('Location: <a href="http://localhost/&#39%3b%29;" target="_blank">http://localhost/');</a>

Nie stosuj headerów do przekierowania, jest do tego helper URL i w nim funkcja redirect();
http://codeigniter.com/user_guide/helpers/url_helper.html

Raz stosujesz ActiveRecords do wykonania zapytania do bazy (sprawdzanie logowania) a przy updatcie piszesz kod SQL,
Jedna zasada albo jedno albo drugie, zapewniam się że w Activerecords można budować na prawdę złożone zapytania.

Bardzo dobrym rozwiązaniem będzie jak później jak już to sobie opanujesz, napiszesz bibliotekę do logowania i z niej będziesz korzystał.
adbacz
Jeszcze małe pytanie bo mam wątpliwości co do bezpieczeństwa.

W sesji jest zapisywany UserID i boolean TRUE. A co jeśli np. zamieni sie cyfrę w UserID w ciastku, które zapisuje CI po stronie usera? Przecież, może być taka sytuacja, że po zamianie jednej cyfry nagle będziemy zalogowani jako ktoś inny.
szok
Ale przecież UserID zapisywany jest w sesji, nie w ciastku.
W ciastku masz tylko identyfikator sesji zapisany nic więcej!.

http://www.google.pl/webhp?hl=pl#hl=pl&...df534d0ed5380e6
http://www.google.pl/webhp?hl=pl#hl=pl&...df534d0ed5380e6
adbacz
Dzięki, nie mam więcej pytań smile.gif
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.