![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 8.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam, napisałem sobie pewien system i panel administracyjny w języku PHP w oparciu o sesję oraz bazę danych MySQL. Wszystko działa bardzo dobrze ale są 2 problemy związane z współbieżnością, z którymi nie mogę sobie poradzić.
1. Problem pierwszy. Panelem administracyjnym zarządza dwóch (lub więcej) administratorów. Problem jest taki, że gdy osoba powiedzmy z miasta X się loguje loginem "abc" to inna osoba z innego miasta, powiedzmy Y, też może się zalogować w tym samym czasie na te same konto. Jak to zablokować? Mam parę pomysłów ale niestety żaden z nich nie będzie dobrze do końca działał. Jeden z pomysłów to odpowiednia wartość ustawiana w bazie danych, czyli gdy admin A loguje się do panelu to ustawiana jest mu pewna wartość 1 w bazie (czyli jest zalogowany). Gdy ktoś inny będzie się próbował zalogować na to konto to sprawdzana jest ta wartość (0 to niezalogowany, 1 to zalogowany). W momencie gdy admin A klika na "Wyloguj" to wartość w bazie przyjmuje wartość 0. To myślę by działało dobrze gdyby nie jeden fakt. W momencie gdy admin wyłączy przeglądarkę i się nie wyloguje (albo np. wywali mu korki i komputer się wyłączy) to zmienna w bazie nie powróci do wartości 0 mimo iż faktycznie ten admin nie przebywa już w PA. Skutek tego będzie taki, że nie będzie się mógł zalogować. Jak sobie poradzić z tym problemem? Szukam i szukam i nic nie wychodzi. 2. Problem drugi Blisko spokrewniony. W panelu admina jest moduł zarządzania stylami CSS. W przypadku gdy w panelu jest zalogowany admin A i B i obaj będą chcieli edytować ten sam styl to wiadomo jak to się skończy. Gdy zmiany wprowadzi admin A a następnie potem admin B to zmiany wprowadzone przez admina A zostaną nadpisane i w ogóle ich nie będzie. Chciałbym to jakoś zrobić, żeby na czas prowadzenia pracy nad danym plikiem była zablokowana jego edycja. Też przez bazę? I znowu ten sam problem z wyłączeniem przeglądarki bądź komputerem bez wylogowania. Jak sobie poradzić z takim czymś, jakie są na to metody? Z góry dziękuję za pomoc. Ten post edytował Majewicz 8.10.2011, 22:19:46 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Żywotność sesji powinieneś raczej liczyć w minutach, nie godzinach. Jednakże pomysł sam z siebie jest raczej słaby (kompletne blokowanie dostępu z dwóch miejsc na raz). Raczej powinieneś rozważyć rozwiązanie stosowane przez Google czy Facebooka w postaci poinformowania, o równoległym zalogowaniu się na konto i możliwości wylogowania "zdublowanych" użytkowników.
Cytat I co dalej? Gdy wprowadzę dużo zmian w różnych miejscach kodu CSS i będę chciał zapisać i wywali mi komunikat, że ktoś zrobił aktualizację w czasie mojej edycji to mam teraz szukać gdzie wprowadzałem zmiany i kopiować do zmodyfikowanego kodu? Czy jak? Generalnie możesz poczytać sobie o rozwiązywaniu konfliktów / kolizji w systemach kontroli wersji - sporo materiału o tym znajdziesz w sieci. A różnic pomiędzy dwoma dokumentami nie musisz szukać samemu - komputery też są w stanie to zrobić: diff.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 27.09.2025 - 11:12 |