Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [CodeIgniter]sesja
acidm
post 9.03.2013, 10:30:00
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Od niedawna zacząłem poznawać CI.
Zauważyłem, że domyślnie codeigniter zapisuje dane sesyjne w (a nie tylko identyfikator) ciastku.
Wiem, że można zmienić magazyn na bazę, ale to mi też nie odpowiada.
Da się zmienić jakoś ustawienia, aby CI przechowywał sesje na dysku w określonej przeze mnie lokalizacji?

Go to the top of the page
+Quote Post
wNogachSpisz
post 9.03.2013, 11:39:01
Post #2





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

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


Wszystko się da, ale musiałbyś przepisac całą biblitekę sesji, bo nie ma tam w tej chwili ani jednej lini która pomogła by zaimpementować przechowywanie danych sesji na dysku.
Co do przechowyywania danych sesji w bazie danych, to moim zdaniem codeigniter jest bugowaty, nawet jeśli zmienisz w config 'use_database' na TRUE, dane nadal siedza w cookie. W rezultacie jesli sprobujesz zapisac do sesji zbyt dużo danych, przekroczysz limit rozmiaru cookie i stanie się najgorsze - utracisz sesję. Na szczecie udało mi się zmodyfikować tą iblitekę i naprawić błąd, jesteś zainteresowany, napisz.

Ten post edytował wNogachSpisz 9.03.2013, 11:41:05
Go to the top of the page
+Quote Post
acidm
post 9.03.2013, 12:26:55
Post #3





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Dzięki za info, ale chyba po prostu skorzystam z natywnych sesji ...
Z innnych dobrodziejstw CI będę jak najbardziej korzystał smile.gif
Tak czy inaczej leci Pomógł za naświetlenie sprawy smile.gif
Go to the top of the page
+Quote Post
mstraczkowski
post 9.03.2013, 16:30:15
Post #4





Grupa: Zarejestrowani
Postów: 273
Pomógł: 52
Dołączył: 3.02.2013
Skąd: Przemyśl

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


A tak mi się przypomniało na temat sesji w bazie danych w CodeIgniter wink.gif

W ich dokumentacji jest przedstawiony przykładowy schemat tabeli do przechowywania sesji

  1. CREATE TABLE IF NOT EXISTS `ci_sessions` (
  2. session_id varchar(40) DEFAULT '0' NOT NULL,
  3. ip_address varchar(45) DEFAULT '0' NOT NULL,
  4. user_agent varchar(120) NOT NULL,
  5. last_activity int(10) UNSIGNED DEFAULT 0 NOT NULL,
  6. user_data text NOT NULL,
  7. PRIMARY KEY (session_id),
  8. KEY `last_activity_idx` (`last_activity`)
  9. );

Uprzedzam, że kolumna user_agent powinna mieć więcej niż VARCHAR(120) - dla niektórych przeglądarek to za mało i miałem przypadki, że userów wylogowywało bez powodu.
Było to właśnie związane z tym, że user agent w bazie był ucinany, a problem jest ciężki w zlokalizowaniu.

Przykład User Agent (176 znaków)
Cytat
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8


Ten post edytował mstraczkowski 9.03.2013, 16:43:54


--------------------
Jeżeli moja wypowiedź Ci pomogła użyj przycisku
Go to the top of the page
+Quote Post
wNogachSpisz
post 9.03.2013, 16:50:45
Post #5





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

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


Cytat(mstraczkowski @ 9.03.2013, 16:30:15 ) *
Uprzedzam, że kolumna user_agent powinna mieć więcej niż VARCHAR(120) - dla niektórych przeglądarek to za mało i miałem przypadki, że userów wylogowywało bez powodu.

@mstraczkowski: Ciekaw jestem w jakiej wersji, bo na pewno nie w ostatniej, user agent zostaje przycięty do 120 znaków i wszystko jest w porządku.

@acidm: Moim zdaniem robisz błąd i powinieneś zostać przy implementacji sesji proponowanej przez codeignitera, daje ona większą elastyczność oraz większe bezpieczeństwo od natywnej sesji PHP.
Go to the top of the page
+Quote Post
sazian
post 9.03.2013, 20:33:43
Post #6





Grupa: Zarejestrowani
Postów: 1 043
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


zapisywanie danych sesji w ciastku daje większą elastyczność i bezpieczeństwo ? niby jak ?
Go to the top of the page
+Quote Post
wNogachSpisz
post 9.03.2013, 20:36:55
Post #7





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

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


Nie napisałem że zapisywanie danych sesji w ciastku daje większe bezpieczeństwo i elastyczność.
Napisałem że używanie implementacji sesji dostarczanej w codeigniterze daje wiekszą elastyczność i bezpieczeństwo.

To tak jakbym napisał, że używanie samochodu daje większą elastyczność i bezpieczęństwo niż podróżowanie autobustem, na co ty byś spytał - Jak przemieszczanie się samochodem o niebieskim kolorze i bezdentkowych oponach wpływa na elastycznośc i bezpieczeństwo.

Ten post edytował wNogachSpisz 9.03.2013, 20:38:59
Go to the top of the page
+Quote Post
acidm
post 9.03.2013, 21:13:53
Post #8





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Cytat(wNogachSpisz @ 9.03.2013, 16:50:45 ) *
daje ona większą elastyczność oraz większe bezpieczeństwo od natywnej sesji PHP.

Możesz rozwinąć myśl?
Go to the top of the page
+Quote Post
sazian
post 9.03.2013, 21:50:50
Post #9





Grupa: Zarejestrowani
Postów: 1 043
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


Cytat(wNogachSpisz @ 9.03.2013, 20:36:55 ) *
Nie napisałem że zapisywanie danych sesji w ciastku daje większe bezpieczeństwo i elastyczność.
Napisałem że używanie implementacji sesji dostarczanej w codeigniterze daje wiekszą elastyczność i bezpieczeństwo.


ok tylko że implementacja sesji w CI zapisuje dane w ciastku

więc
(sesja w CI == zapis danych w ciastku) oraz (sesja w CI == większą elastyczność i bezpieczeństwo) => zapis danych w ciastku == większą elastyczność i bezpieczeństwo
Go to the top of the page
+Quote Post
wNogachSpisz
post 9.03.2013, 21:52:47
Post #10





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

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


Nie. Fakt że sesja jest zaimplementowana bez polegania na natywnym mechnizmie sesji daje większe bezpieczeństwo i elastyczność.

Ten post edytował wNogachSpisz 9.03.2013, 21:53:22
Go to the top of the page
+Quote Post
acidm
post 9.03.2013, 22:29:55
Post #11





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Cytat(wNogachSpisz @ 9.03.2013, 21:52:47 ) *
Nie. Fakt że sesja jest zaimplementowana bez polegania na natywnym mechnizmie sesji daje większe bezpieczeństwo i elastyczność.

IMO to że sesja w CI nie działa na natywnych sesjach samo w sobie mówi mi tylko tyle że mechanizm ten nie bedzie podatny(uzależniony) od ewentualnych zmian w natywnym mechanizmie sesji php...I nic poza tym.
Przytocz proszę argumenty większego bezpieczeństwa i elastyczności sesji w CI.



Go to the top of the page
+Quote Post
wNogachSpisz
post 9.03.2013, 22:49:31
Post #12





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

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


Cytat(acidm @ 9.03.2013, 22:29:55 ) *
mechanizm ten nie bedzie podatny(uzależniony) od ewentualnych zmian w natywnym mechanizmie sesji

Zmian i bugów... Wszystkiego nie napiszę, bo mój altruizm i chęć dzielenia się wiedzą mają swoje granice smile.gif

Elastyczność:
Wyobraź sobię, że masz konto na hostingu gdzie funkcja ini_set jest zablokowana, nie możesz zmieniać konfiguracji sesji, w takiej sytuacji CI daje większą elastyczność.

Ten post edytował wNogachSpisz 9.03.2013, 23:01:46
Go to the top of the page
+Quote Post
markonix
post 10.03.2013, 00:32:09
Post #13





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Kurde, korzystam z CI i teraz się dopiero zorientowałem że sesje trzymane są domyślnie w ciachu i to jeszcze z jawnymi nazwami :/


--------------------
Go to the top of the page
+Quote Post
acidm
post 10.03.2013, 08:34:46
Post #14





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


No i jest problem ...
Uruchamiam session_regenerate_id(true) w skrypcie wykorzystujacym CI i serwer przestaje odpowiadać ..
HELP sad.gif

@wNogachSpisz to że mechanizm jest odseparowany od natywnego to dobrze , ale ciastka jako magazyn danych?questionmark.gif
Mieszać do tego bazę nie wiem czy jest sens,mało to wydajne i z tego co mówisz zabugowane , co zaraz sprawdzę.


Obsługa sesji z użyciem bazy danych działa poprawnie , w ciastku są tylko dane potrzebne do identyfikacji a w bazie są zapisywane właściwe dane sesyjne.Ale i tak bym wolał użyć katalogu jako magazynu, więc jak ktoś ma pomysł jak naprawić używanie session_regenerate_id(true) wraz z CI to bardzo proszę o info.

Ten post edytował acidm 10.03.2013, 11:07:32
Go to the top of the page
+Quote Post
wNogachSpisz
post 10.03.2013, 12:52:22
Post #15





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

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


Cytat(acidm @ 10.03.2013, 08:34:46 ) *
Obsługa sesji z użyciem bazy danych działa poprawnie , w ciastku są tylko dane potrzebne do identyfikacji a w bazie są zapisywane właściwe dane sesyjne.

Nie prawda, dane lądują zarówno w sesji jak w cookie, sprawdź dokładnie.

Cytat(acidm @ 10.03.2013, 08:34:46 ) *
@wNogachSpisz to że mechanizm jest odseparowany od natywnego to dobrze , ale ciastka jako magazyn danych?questionmark.gif

W czym problem? Najwydajniejszy sposób przechowywania session data to właśnie cookie. Potrzebujesz ukryć dane? Włącz szyfrowanie.

Ten post edytował wNogachSpisz 10.03.2013, 12:57:11
Go to the top of the page
+Quote Post
acidm
post 10.03.2013, 16:24:18
Post #16





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Cytat(wNogachSpisz @ 10.03.2013, 12:52:22 ) *
Nie prawda, dane lądują zarówno w sesji jak w cookie, sprawdź dokładnie.


Prawda ,prawda sam sobie sprawdź ,po ustawieniu w configu na użycie bazy danych w sesjach do ciastka leci tylko te dane które CI może wykorzystać w celu autoryzacji sesji :
ip_adress,user_agent,last_activity,session_id
Pozostałe dane leca do bazy tongue.gif

Żeby nie było:

Plik config(część odpowiedzialna za sesje)
  1. $config['sess_cookie_name'] = 'ci_session';
  2. $config['sess_expiration'] = 7200;
  3. $config['sess_expire_on_close'] = TRUE;
  4. $config['sess_encrypt_cookie'] = FALSE;// celowo żeby było coś widać:)
  5. $config['sess_use_database'] = TRUE;
  6. $config['sess_table_name'] = 'ci_sessions';
  7. $config['sess_match_ip'] = FALSE;
  8. $config['sess_match_useragent'] = TRUE;
  9. $config['sess_time_to_update'] = 300;


Kod nr 1:
  1. <?php
  2. class Test extends CI_Controller
  3. {
  4.  
  5. public function index()
  6. {
  7. $this->load->library('session');
  8. $this->session->set_userdata('człowiek','ja');
  9.  
  10. }
  11. }
  12. ?>


Wartość ciastka :
Kod
    a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22aa33f0fb3035e95b496bddda8c8d74d8%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A9%3A%22127.0.0.1%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A72%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+WOW64%3B+rv%3A19.0%29+Gecko%2F20100101+Firefox%2F19.0%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1362927846%3B%7D95b76a69a20e9afafcc5b9c6642e123d


Kod nr 2:
  1. <?php
  2. class Test extends CI_Controller
  3. {
  4.  
  5. public function index()
  6. {
  7. $this->load->library('session');
  8. $this->session->set_userdata('stefan','murarz');
  9. $this->session->set_userdata('mietek','cieć');
  10. $this->session->set_userdata('ziutek','dekarz');
  11. }
  12. }
  13. ?>


Wartość ciastka :
Kod
    a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%221783399591723401246086d83a1931f8%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A9%3A%22127.0.0.1%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A72%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+WOW64%3B+rv%3A19.0%29+Gecko%2F20100101+Firefox%2F19.0%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1362928789%3B%7D30e96ae5df96d15a14d872f72dc17c6c



A co mam do ciastek questionmark.gif
To że nie powinny służyć jako magazyn danych sesyjnych (użytkownika) ,nawet jeśli te dane mają być zaszyfrowane.
Nie jest to bezpieczne i praktyczne, szyfrowanie tych danych zajmuje miejsce a tego w ciastku nie ma zbyt wiele.

Ten post edytował acidm 10.03.2013, 16:30:53
Go to the top of the page
+Quote Post
Lion
post 10.03.2013, 17:27:06
Post #17





Grupa: Zarejestrowani
Postów: 148
Pomógł: 14
Dołączył: 23.02.2013

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


Istnieje także biblioteka wspierająca natywne sesje w CI. Nazywa się Native Session i można ją znaleźć tu: https://github.com/EllisLab/CodeIgniter/wiki/Native-session. Wystarczy wrzucić do bibliotek w aplikacji i działa.


--------------------
Go to the top of the page
+Quote Post
wNogachSpisz
post 10.03.2013, 17:34:44
Post #18





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

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


@acidm
Którą masz wersję CI?
Go to the top of the page
+Quote Post
acidm
post 10.03.2013, 17:50:36
Post #19





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


@wNogachSpisz 2.1.3
@Lion już sprawdzam smile.gif

PS nie wie ktoś jak zmienić ustawienia sesji w CI ale tylko na czas działania skryptu ?
Próbowałem tak:
  1. $this->load->library('session');
  2. $this->config->set_item('sess_expiration',60*60*24*10);
  3. $this->config->set_item('sess_expire_on_close',FALSE);

ale to nic nie dało sad.gif
Go to the top of the page
+Quote Post
wNogachSpisz
post 10.03.2013, 17:55:01
Post #20





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

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


Cytat(acidm @ 10.03.2013, 17:50:36 ) *
PS nie wie ktoś jak zmienić ustawienia sesji w CI ale tylko na czas działania skryptu ?

Stwórz własny config, np. o nazwie "my_config.php" napisz w nim ustawienia dla sesji zapisz plik w katalogu "/application/config/", nastepnie otwórz plik "/application/config/autoload.php" i dorzuc automatyczne ladowanie pliku "my_config". Alternawynie możesz napisać własny kontroler "core/my_controller.php" i tam w construktorze ładować plik config. Alternatywnie możesz też ustawić tzw. hook systemowy "/application/hooks", czyli coś w rodzaju eventu i ładować swoj plik config np. podczas zdarzenia "pre_controller".

Coś jeszcze chcesz wiedziec o CodeIgniterze? smile.gif

Ten post edytował wNogachSpisz 10.03.2013, 17:58:24
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 28.03.2024 - 16:45