![]() |
![]() ![]() |
![]() |
![]()
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 ![]() 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:
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:
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 -------------------- Pozdrawiam,
iwosz. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Dziwisz się? Tak działa przecież sesja więc temat naprawdę jest trochę bez sensu.
Wyobraź sobie, że jestes serwerem. Użytkownik wchodzi na stronę i skrypt prosi cię o utworzenie dla niego sesji o podanym ID Ty tworzysz sobie pudełeczko, podpisujesz go ID i trzymasz tam jakieś rzeczy. Przy każdym kolejnym skrypcie który żąda dostępu do sesji dajesz mu dane z tego samego pudełka. Nie tworzysz nowego. Po to są właśnie sesje i takie jest ich przeznaczenie. Ten post edytował wookieb 30.07.2009, 11:14:16 -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 62 Pomógł: 3 Dołączył: 30.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
hmm, no ok rozumiem, ale np jak odpale aplikacje w innej przegladarce, to nie jestem zalogowany, tylko musze sie zalogowac ponownie (a zgodnie z tym co mowisz mam juz swoje pudeleczko), ogolnie daze do tego aby moc przechowywac zmienna dla obu aplikacji w sesji ale NIEZALEZNIE :]
-------------------- Pozdrawiam,
iwosz. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
hmm, no ok rozumiem, ale np jak odpale aplikacje w innej przegladarce, to nie jestem zalogowany, tylko musze sie zalogowac ponownie (a zgodnie z tym co mowisz mam juz swoje pudeleczko), ogolnie daze do tego aby moc przechowywac zmienna dla obu aplikacji w sesji ale NIEZALEZNIE :] Twój id jest przechowywany najprawdopodobniej w cookie ![]() Jeżeli byłbym przechowywany w pasku adresu (wyłącz sobie cookie) i przekopiowałbyś adres - zobaczysz, że sesja działa. (ew. przekopiuj ciasteczko) -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
ID jakim się reprezentujesz jest zapisywane w ciasteczku (najczesciej i najlepiej) a kazda przegladarka ma "swoje" ciasteczka.
-------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 62 Pomógł: 3 Dołączył: 30.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Twój id jest przechowywany najprawdopodobniej w cookie ![]() Jeżeli byłbym przechowywany w pasku adresu (wyłącz sobie cookie) i przekopiowałbyś adres - zobaczysz, że sesja działa. (ew. przekopiuj ciasteczko) mhm, rozumiem wiec jakie rozwiazanie tego problemu bylo by najlepsze? Lub jakie sa mozliwosci w takim przypadku? No i oczywiscie jak to sie ma do bezpieczenstwa danych? :] Czy tak jak pisalem, dodawanie prefiksow do zmiennych danej aplikacji, rozwiazalo by problem? Moze w jakis sposob mozna wymusic zainicjowanie nowej sesji dla drugiej aplikacji? btw. dzieki za taks zybka odpowiedz! ![]() -------------------- Pozdrawiam,
iwosz. |
|
|
![]()
Post
#7
|
|
![]() 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
A to jak rozroznisz aplikacje to juz zalezy od ciebie. Ten post edytował wookieb 30.07.2009, 11:43:57 -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
mhm, rozumiem wiec jakie rozwiazanie tego problemu bylo by najlepsze? Lub jakie sa mozliwosci w takim przypadku? No i oczywiscie jak to sie ma do bezpieczenstwa danych? :] Czy tak jak pisalem, dodawanie prefiksow do zmiennych danej aplikacji, rozwiazalo by problem? Moze w jakis sposob mozna wymusic zainicjowanie nowej sesji dla drugiej aplikacji? btw. dzieki za taks zybka odpowiedz! ![]() Jeżeli chodzi o bezpieczeństwo, to moim skromnym zdaniem wygląda to tak: - Gdy masz serwer dla siebie, jedną domenę i sam używasz sesji - wtedy te z php wystarczą. A w każdym innym przypadku polecam napisanie własnego session handlera w oparciu o bazę danych czy to sqlite czy mysql... Jeden użytkownik nie może mieć dwóch id, już Ci to kolega pisał. ![]() -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 62 Pomógł: 3 Dołączył: 30.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Przekazywanie id ciasteczka w adresie URL (niepolecane) albo najzwyklej w swiecie tworzysz w sesjie dwa klucze
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 ![]() -------------------- Pozdrawiam,
iwosz. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Tak jak kolega wyzej napisał. Napisz session_handlera któremu przekazujesz nazwe aplikacje ktorej ma załadować sesje i po klopocie. Najszybsza metoda.
O session_handlerze pisze nawet na php.pl -------------------- |
|
|
![]() ![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
A ja bym zaproponował w każdej aplikacji przed wywołaniem sesji,
wstawić taką linijkę kodu: np: W aplikacji 1: W aplikacji 2: W ten sposób ciasteczka i sesje będą trzymane w 2 różnych miejscach, będą posiadać też dwa różne 'sessien_id'. I w momencie usuwania sesji z pierwszej aplikacji wystarczy: nie ruszy to sesji z drugiej aplikacji, i tak samo na odwrót, usunięcie sesji z drugiej aplikacji nie ruszy sesji z pierwszej aplikacji. Pozdrawiam, a tak swoją drogą mam odwrotny problem, mam 2 aplikacje i chcę mieć miedzy nimi tą samą sesje loginy i tak dalej. Niby sesje są zapisywane w jednym miejscu , ale jedna sesja nadpisuje drugą nie czytając jej , tak wiec jak się zaloguje na pierwszej aplikacji i wejdę na druga aplikacje, to nie dość że na tej drugiej cały czas jestem nie zalogowany to na tej pierwszej zostaje wylogowany. (z powodu nadpisania sesji przez tą drugą aplikacje). Ktoś może zna rozwiązanie tego problemu? Co jest nie tak, albo co robię źle? Pozdrawiam., -------------------- Pozdrawiam,
Sokrates |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 62 Pomógł: 3 Dołączył: 30.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
a tak swoją drogą mam odwrotny problem, mam 2 aplikacje i chcę mieć miedzy nimi tą samą sesje loginy i tak dalej. Niby sesje są zapisywane w jednym miejscu , ale jedna sesja nadpisuje drugą nie czytając jej , tak wiec jak się zaloguje na pierwszej aplikacji i wejdę na druga aplikacje, to nie dość że na tej drugiej cały czas jestem nie zalogowany to na tej pierwszej zostaje wylogowany. (z powodu nadpisania sesji przez tą drugą aplikacje). Ktoś może zna rozwiązanie tego problemu? Co jest nie tak, albo co robię źle? Pozdrawiam., Hmm, to jest chyba mniejszy problem, bo mozesz zawsze sprawdzic:
czy np zmienna 'login' istnieje. Ten post edytował iwosz 27.11.2009, 11:07:07 -------------------- Pozdrawiam,
iwosz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 01:09 |