Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Konflikty, nadpisywanie i bezpieczenstwo Sesji, Problemy wynikajace z wywolywania sesji wielokrotnie
iwosz
post
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 30.07.2009

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


Witam,

na wstepie chcial bym zauwazyc ze piszac nowy temat dreczy mnie mysl ze 'taki temat byl juz 100razy' i zaraz ktos sie do mnie doczepi - to chyba troche chore ze na forum nie mozna sie w spokoju wypowiedziec, z drugiej strony rozumiem moderatorow. W kazdym razie jak pisze to znaczy ze szukalem i nie znalazlem.

Problem:

Powiedzmy ze mamy 2 aplikacje, odpalamy obie, w kazdej z nich inicjowane sa zmienne sesyjne, niektore o takich samych nazwach (np. $SESSION['user_login'], lub cokolwiek innego), juz w trakcie uzytkowania abu aplikacji w tym samym czasie, zauwazylem ze w obu aplikacjach wyswietlajac zmienne sesyjne mamy dokladnie taka sama tablice, z reguly z danymi aplikacji ktora uruchomilismy jako ostatnia, czyli mowiac potocznie wyglada to tak jakby sesja zainicjowana w aplikacji 2 nadpisala sesji w aplikacji 1. Czy to jest mozliwe? W manualu PHP, czesc dot. sesji nie ma takich informacji, lub sa niewystarczajace. Czy jest to zwiazane z ustawieniami w php.ini (plik z danymi sesji) ?

Co ciekawe pomimo wyswietlania w aplikacji 1 zmiennych z aplikacji 2, aplikacja 1 dziala poprawnie (musi korzystac z wlasnych zmiennych). Jesli jest to tylko kwestia wyswietlania ostatnio zarejestrowanych zmiennych, to luz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Glowny problem:

W wyniku powyzszego problemu, w momencie wylogowania sie z aplikacji 2, rowniez uzytkownik zostaje wylogowany z aplikacji 1... a dokladnie zmienne przechowujace info o logowaniu danego uzytkownika musza byc niszczone. Ciezko mi dokladnie zdiagnozowac problem, wylogowanie polega na zniszczeniu sesji:

  1. <?php
  2. $_SESSION = array();
  3. unset($_SESSION);
  4. ?>


Ustawienia php.ini:
session.cookie_httponly: Onsession.cookie_lifetime: 0session.cookie_path: /session.name: PHPSESSIDsession.use_cookies: Onsession.use_only_cookies: Off" title="Zobacz w manualu PHP" target="_manual

w aplikacji (z koniecznosci) ustawiam naglowki:
  1. <?php
  2. session_cache_limiter ('must-revalidate');
  3. header("must-revalidate");
  4. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  5. ?>




Tak to wyglada, testuje na localhoscie, PHP 5.2.9-2, Apache 2.2 pod Windows XP sp3

Pierwszym i najprostrzym chyab rozwiazaniem bylo by w jednej z aplikacji dodanie przedrostka do wszystkich zmiennych sesji w danej aplikacji (np 'ap1-nazwa_zmiennej'). Wtedy nawet jesli obie sesje sie nakladaja, to itak zmienne sie nie nadpisza, pozostaje jednak problem niszczenia sesji... nalezalo by przejrzec sesje i usunac wszystkie zmienne z danym przedrostkiem. Wydaje sie to dosc malo optymalnym rozwiazaniem...

Problem moze sie tez wiazac z blednie wygenerowanym ID sesji (jest on generowany domyslnie, nic nie bylo zmieniane). W momencie wyswietlania nazwy sesji funkcja session_name() w obu aplikacjach wyswietlane jest PHPSESSID. Czytalem o session_regenerate_id() itd. ale nie jestem pewien czy to dobra droga...

Caly czas badam ten problem, wykluczam niektore opcje, podejrzewam jednak ze nie mam wystarczajacej wiedzy na temat Sesji w PHP... dlatego zwracam sie z prosba o zidentyfikowanie problemu, sam caly czas czytam o sesjach i szukam rozwiazania. Jesli ten problem byl juz jednak omawiany wystarczy link do tematu :]


Z gory dziekuje za wszelka pomoc

Pozdrawiam

Ten post edytował iwosz 30.07.2009, 12:11:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Przekazywanie id ciasteczka w adresie URL (niepolecane) albo najzwyklej w swiecie tworzysz w sesjie dwa klucze
  1. <?php
  2. $_SESSION['aplikacja_1']=dane
  3. $_SESSION['aplikacja_2']=dane
  4. ?>

A to jak rozroznisz aplikacje to juz zalezy od ciebie.

Ten post edytował wookieb 30.07.2009, 11:43:57
Go to the top of the page
+Quote Post
iwosz
post
Post #3





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 30.07.2009

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


Cytat(wookieb @ 30.07.2009, 12:42:32 ) *
Przekazywanie id ciasteczka w adresie URL (niepolecane) albo najzwyklej w swiecie tworzysz w sesjie dwa klucze
  1. <?php
  2. $_SESSION['aplikacja_1']=dane
  3. $_SESSION['aplikacja_2']=dane
  4. ?>

A to jak rozroznisz aplikacje to juz zalezy od ciebie.



no wlasnie, tak jak pisalem, to byl pierwszy pomysl jaki mi wpadl do glowy :] (wiaze sie to niestety z przerobieniem wszystkich zmiennych sesyjnych wykorzystywanych w kodzie aplikacj), jest to chyab najprostrzy pomysl, mozna przy wylogowaniu zrobic unset( $_SESSION['aplikacja_1'] )

ale moze ktos ma jeszcze inny sposob? oczywiscie ten jest dobry wookieb dzieki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 18:16