Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Własny mechanizm sesji
Forum PHP.pl > Forum > PHP
Nostress
Witam wszystkich w moim pierwszym poście aarambo.gif

Mam już za sobą napisanie kilku mniejszych czy średnich projektów, gdzie do sprawdzenia zalogowanego użytkownika używam sesji - co ważne - tych "wbudowanych" w php. Użycie tego jest proste, ale mimo to często spotykamy się ze stanowiskiem, że warto napisać sobie swój własny mechanizm (oparty na bazie danych). Stąd moich kilka pytań:

1. Czy napisanie własnego mechanizmu (przyjmując, że zostanie on napisany dobrze) zwiększy bezpieczeństwo stron? Jeśli tak, to co jest niebezpiecznego w używaniu wbudowanych w php sesji?

2. Zacząłem pisać taki mechanizm, i dochodzę do wniosku, że aby uzyskać taką funkcjonalność jak wbudowany system nieuchronnie mój skrypt będzie miał o kilka zapytań mysql więcej, więc podejrzewam, że własny mechanizm będzie wolniejszy, myle się?

Narazie tyle, ale jeszcze coś mi się nasunie z pewnością smile.gif,

Pozdrawiam.
mike
Polecam bardzo dobre dwa artykuły o sesjach, znajdujące się na webcity.pl
1. Sesje w php - przyda Ci się do odpowiedzi na pierwsze pytanie;
2. Własny mechanizm sesji w php.
Co do zwolnienia aplikacji ... coś za coś. Jedno zapytanie więcej nie jest niczym bardzo strasznym.
Nostress
Hmmmm.. po przeczytaniu "Sesje w php" stwierdzam, że tworzenie swojego własnego mechanizmu sesji nie będzie bardziej bezpieczne niż sesje wbudowane w php.

W obu przypadkach (wbudowane sesje vs "Własny mechanizm sesji" z webcity) system korzysta z ciastek, a reszta danych znajduję sie na serwerze.

Wniosek: ceniąc bezpieczeństwo i szybkość skryptów lepiej korzystać z sesji wbudowanych? :/
em1X
(prawie) Zawsze lepiej polegac na pracy profesjonalistów..
erix
Cytat
Hmmmm.. po przeczytaniu "Sesje w php" stwierdzam, że tworzenie swojego własnego mechanizmu sesji nie będzie bardziej bezpieczne niż sesje wbudowane w php.

Wezmy pod uwage jeden przyklad: masz system zarzadzania userami. Chcesz zapobiec rownoczesnemu zalogowaniu tego samego uzytkownika z dwoch roznych komputerow. Bez wlasnego handlera do sesji tego nie osiagniesz.
mike
No i skrypty takie jak "Who's online" są banalne do wykonania z własnym handlerem.
Wszystko zależy od tego czego potrzebujesz.

Jak to powiedział kiedyś prezydent Wałęsa:
"Są plusy dodatnie i plusy ujemne" smile.gif
Nostress
Ok, to teraz problem natury technicznej.

Używając wbudowanych sesji można tworzyć sobie zmienne, przykładowo:

  1. <?php
  2. $_SESSION['zmienna'] = 'wartosc';
  3. ?>


Jak to rozwiązać przy pisaniu własnego systemu sesji?

Po krótkim zastanowieniu dochodzę do wniosku, że można by to rozwiązać tak:

1. Tworzymy nową tabelke w mysql o strukturze:
session_id | key | value | time

2. Następnie tworzymy jakąś funkcyjke służącą tworzeniu nowych "zmiennych sesyjnych" mniej-wiecej:
  1. <?php
  2. data_register( $key, $value )
  3. {
  4.  // umieszczamy nową daną w naszej tabelce
  5. }
  6. ?>


3. A później tylko funkcja, która pobierze nam nasze dane z bazy i wrzuci w jakąś tablice.

Jak wy to zrobiliście?
SongoQ
Cytat
Jak wy to zrobiliście?

W PG i Oracle zrobilem w ten sposob ze jedna funkcja zalatwiam wszystko (funkcja DB) tak naprawde po stronie php jest wywolywanie caly czas ten funkcji czyli zapytanie SQL'a i od parametrow zalezy co ma sie dziac. Dla MySQLa musisz pisac update, insert, select i delete w zaleznosci co chesz zrobic.
erix
Cytat
tworzeniu nowych "zmiennych sesyjnych"

a na szto?

Masz przeciez serialize(), potem wrzucasz calosc do bazy (zmienne zserializowane) i potem przywracasz jak chcesz; nie musisz robic balaganu w bazie.

Cytat
Dla MySQLa musisz pisac update, insert, select i delete

O ile mi wiadomo, to od ktorejs wersji MySQL-a mozna tworzyc wlasne funkcje w bazie biggrin.gif
SongoQ
Cytat
O ile mi wiadomo, to od ktorejs wersji MySQL-a mozna tworzyc wlasne funkcje w bazie

Od 5.0 heheh az mi z glowy wylecialo. @erix dzieki za przypomnienie.
dr_bonzo
Cytat
Jak to rozwiązać przy pisaniu własnego systemu sesji?

Tutaj sei nic nie zmienia -- ciagle korzystasz z $_SESSION

Napisanie wlasnego handlera sesji to napisanie kilku funkcji (mozna wrzucic do klasy), ktore zapisuja i odczytuja stringa i date (mozna oczywiscie dodac wiecej funkcjonalnosci). To tyle. Szczegoly w manualu o Sesjach.
Black-Berry
Cytat(erix @ 28.05.2006, 19:38:16 ) *
Wezmy pod uwage jeden przyklad: masz system zarzadzania userami. Chcesz zapobiec rownoczesnemu zalogowaniu tego samego uzytkownika z dwoch roznych komputerow. Bez wlasnego handlera do sesji tego nie osiagniesz.

Sory za wykop ale chciałbym o coś zapytać... Jestem raczej przeciwnikiem sessji opartej o bazę danych bo zależy mi na wydajności i zastanawiam się czy problem który podajesz nei mógłby być rozwiązany za pomocą tego: session_set_save_handler. Czy użycie własnych metod zapisu nie wpłynełoby jednocześnie na poprawę bezpieczeństwa, pozwoliło na zaawansowane zarządzanie i nie nadwyrężałoby bazy danych ? 3 pieczenie przy jednym ogniu. Może ktoś ma doświadczenie z takim rozwiązaniem ?
Sh4dow
jako "przechowalni danych" możesz użyć bazy danych, plików lub np. memcache. A klasie/funkcje które będą to obsługiwały to już inna sprawa i zazwyczaj zależy ona od ciebie co chcesz w niej mieć.
Black-Berry
No tak ale czemu rozwiązanie w wersji na plikach miałoby mieć jakieś wady? Jeśli nadpiszemy orginalne funkcje php to nie ma żadnych wad bo można sobie zrobić z nimi co się chce no i nie muli baza. Nie siedziałem jeszcze nad tym ale mam zamiar się zabrać więc jeśli ktokolwiek mógłby coś dorzucić dp tematu to byłbym wdzięczny smile.gif
Sh4dow
całe szczęście nikt nie wymusza używania bazy danych. Jest to najczęstsze rozwiązanie ponieważ zarządzanie danymi jest dość proste i wiele pracy jest zrzucone na bazę danych zamiast na kod programisty. Ja osobiście używam w paru miejscach memcache, ale niestety tez wbudowanego w php i jak na razie działa bez problemów. No ale trzeba mieć własny serwer.
Asmox
Cytat(erix @ 28.05.2006, 18:38:16 ) *
Wezmy pod uwagę jeden przykład: masz system zarządzania userami. Chcesz zapobiec równoczesnemu zalogowaniu tego samego użytkownika z dwóch róznych komputerów. Bez własnego handlera do sesji tego nie osiągniesz.


A co jest złego w równoczesnym zalogowaniu tego samego usera z dwóch różnych komputerów?
I co to jest handler?
nospor
Cytat
A co jest złego w równoczesnym zalogowaniu tego samego usera z dwóch różnych komputerów?
W normalnej sytuacji nic. Ale czasami mozesz miec potrzebe, by na to nie pozwalac.

Cytat
I co to jest handler?

http://pl.php.net/manual/pl/function.sessi...ave-handler.php
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.