Problem ze zmianą wartości rekordu... (skomplikowane)
Kamil Zeno - 24-12-2006 00:37
Problem ze zmianą wartości rekordu... (skomplikowane)
Witam Państwa
Jest sobie aplikacja i baza w Postgresie. Jest tabela 'users' z polem 'zalogowany'. Jeżeli jakiś użytkownik uruchomi program (wpisze swój login i hasło) to pole 'zalogowany' otrzymuje wartość 1. Przy zamykaniu aplikacji wartość ta zmienia się na 0. Pojawia się problem gdy w trakcie działania programu, program zostanie "nielegalnie" wyłączony lub zabraknie prądu. Wtedy wartość w bazie pozostaje '1', a chciałbym żeby była '0'. Jak to zrobić? Baza jest w stanie wykryć nagłe zerwanie połączenia i zmienię wartości na 0? Czy może w programie coś trzeba pokombinować? Ogolnie chodzi o zabezpieczenie przed uruchomieniem kilku kopii programu przez tego samego usera. Gdy user jest zalogowany to ma wartość '1' i gdy ktoś inny próbuję się zalogować na jego konto to wyskakuje komunikat, że logowanie jest zabronione.
Dzięki z gory. Pozdrawiam.
Jacek Czapla - 24-12-2006 00:37
Kamil Zeno napisał(a): > Witam Państwa > > Jest sobie aplikacja i baza w Postgresie. Jest tabela > 'users' z polem 'zalogowany'. Jeżeli jakiś użytkownik > uruchomi program (wpisze swój login i hasło) to pole > 'zalogowany' otrzymuje wartość 1. Przy zamykaniu > aplikacji wartość ta zmienia się na 0. > Pojawia się problem gdy w trakcie działania programu, > program zostanie "nielegalnie" wyłączony lub zabraknie > prądu. Wtedy wartość w bazie pozostaje '1', a chciałbym > żeby była '0'. Jak to zrobić? Baza jest w stanie wykryć > nagłe zerwanie połączenia i zmienię wartości na 0? Czy > może w programie coś trzeba pokombinować? > Ogolnie chodzi o zabezpieczenie przed uruchomieniem > kilku kopii programu przez tego samego usera. Gdy > user jest zalogowany to ma wartość '1' i gdy ktoś inny > próbuję się zalogować na jego konto to wyskakuje > komunikat, że logowanie jest zabronione. > > Hm... Możesz napisać po co Ci taki potworek? Może zrób coś w rodzaju wygasającej po kilku minutach sesji. Zapisuj gdzieś godzinę ostatniej wykonanej przez usera operacji i sprawdzaj przy logowaniu. Jeśli większa od np. 5 minut to zeruj 'zalogowany' i loguj innego usera.
A jeśli chodzi o zabezpieczenie przed uruchomieniem kilku instancji to można wyszukiwać uruchomionych procesów albo nazw okien ale to już OT. Napisz na jakąś grupę o programowaniu i koniecznie napisz w czy to piszesz.
-- *Jacek Czapla* //usuń ".pułapka" z adresu email www.ASIT.pl http://www.busyonline.pl - Rezerwacja miejsc w busach
Kamil Zeno - 24-12-2006 00:37
Użytkownik "Jacek Czapla" <jczapla.pulapka@asit.pl> napisał w wiadomości news:elmfr9$dhm$1@news.onet.pl... > Hm... > Możesz napisać po co Ci taki potworek?
Chodzi o to, że sprzedaję aplikację klientowi z opcją dodania trzech użytkowników (3 naraz może pracować na programie). I nie ma możliwości, żeby zalogował się jakiś inny nowy użytkownik i żeby dany użytkownik nie zalogował się dwa razy na ten sam login.
> Może zrób coś w rodzaju wygasającej po kilku minutach sesji. Zapisuj > gdzieś godzinę ostatniej wykonanej przez usera operacji i sprawdzaj przy > logowaniu. Jeśli większa od np. 5 minut to zeruj 'zalogowany' i loguj > innego usera. >
Jest to myśl. Przeanalizuję to rozwiązanie.
Kamil
Jacek Czapla - 24-12-2006 00:37
Kamil Zeno napisał(a): > Użytkownik "Jacek Czapla" <jczapla.pulapka@asit.pl> napisał w wiadomości > news:elmfr9$dhm$1@news.onet.pl... >> Hm... >> Możesz napisać po co Ci taki potworek? > > Chodzi o to, że sprzedaję aplikację klientowi z opcją dodania trzech > użytkowników (3 naraz może pracować na programie). I nie ma > możliwości, żeby zalogował się jakiś inny nowy użytkownik i żeby > dany użytkownik nie zalogował się dwa razy na ten sam login.
A nie możesz zabezpieczyć jakimś kluczem sprzętowym? Można znaleźć za kilkadziesiąt zł.
-- *Jacek Czapla* //usuń ".pułapka" z adresu email www.ASIT.pl http://www.busyonline.pl - Rezerwacja miejsc w busach
Maciek Dobrzanski - 24-12-2006 00:37
"Kamil Zeno" <niepodajetutajmaila@nic.pl> wrote in message news:elmdil$i9g$1@atlantis.news.tpi.pl...
> Ogolnie chodzi o zabezpieczenie przed uruchomieniem > kilku kopii programu przez tego samego usera. Gdy
Cóż, jeśli nie ma innego wyjścia (typu funkcji GET_LOCK()/RELEASE_LOCK() z MySQL) to zawsze możesz w aplikacji oprogramować periodyczne (np. co minutę) rejestrowanie w bazie aktywności, w postaci tabeli sesji (nazwa użytkownika, identyfikator sesji, czas rejestracji). Wówczas by aplikacja mogła się zalogować albo wiersz z daną nazwą użytkownika nie może istnieć, albo identyfikator sesji (w postaci np. UUID) musi być zgodny z tym zapamiętanym w aplikacji (w zasadzie jedynie w przypadku cyklicznego odświeżenia czasu rejestracji), albo czas rejestracji musi być starszy od danej chwili o zadany interwał (np. wspomnianą minutę). Przy wylogowywaniu oczywiście wiersz danego użytkownika usuwasz.
Maciek
hubert depesz lubaczewski - 24-12-2006 00:37
On 2006-12-12, Kamil Zeno <niepodajetutajmaila@nic.pl> wrote: > Jest sobie aplikacja i baza w Postgresie. Jest tabela > 'users' z polem 'zalogowany'. Jeżeli jakiś użytkownik > uruchomi program (wpisze swój login i hasło) to pole > 'zalogowany' otrzymuje wartość 1. Przy zamykaniu > aplikacji wartość ta zmienia się na 0.
fatalny pomysł. jak chcesz trzymać w bazie taką informację to użyj (fakt to dopiero w 8.2) advisory locków. nie będziesz miał problemu z połączeniami.
depesz
-- http://www.depesz.com/ -> nowy, jeszcze lepszy, depesz
Krzysztof Raczkowski - 24-12-2006 00:37
hubert depesz lubaczewski napisał(a): > On 2006-12-12, Kamil Zeno <niepodajetutajmaila@nic.pl> wrote: >> Jest sobie aplikacja i baza w Postgresie. Jest tabela >> 'users' z polem 'zalogowany'. Jeżeli jakiś użytkownik >> uruchomi program (wpisze swój login i hasło) to pole >> 'zalogowany' otrzymuje wartość 1. Przy zamykaniu >> aplikacji wartość ta zmienia się na 0. > > fatalny pomysł. > jak chcesz trzymać w bazie taką informację to użyj (fakt to dopiero w > 8.2) advisory locków. > nie będziesz miał problemu z połączeniami. > > depesz >
A czy przypadkiem we wcześniejszych wersjach problemu nie rozwiążą user_locks z katalogu contrib ?? Może są sprzątane jak sesja zostanie zerwana ... nie używałem jeszcze więc nie wiem :)
-- Pozdrowienia K. Raczkowski
Paweł Matejski - 24-12-2006 00:37
Kamil Zeno wrote: > Witam Państwa > > Jest sobie aplikacja i baza w Postgresie. Jest tabela > 'users' z polem 'zalogowany'. Jeżeli jakiś użytkownik > uruchomi program (wpisze swój login i hasło) to pole > 'zalogowany' otrzymuje wartość 1. Przy zamykaniu > aplikacji wartość ta zmienia się na 0. > Pojawia się problem gdy w trakcie działania programu, > program zostanie "nielegalnie" wyłączony lub zabraknie > prądu. Wtedy wartość w bazie pozostaje '1', a chciałbym > żeby była '0'. Jak to zrobić? Baza jest w stanie wykryć > nagłe zerwanie połączenia i zmienię wartości na 0? Czy > może w programie coś trzeba pokombinować? > Ogolnie chodzi o zabezpieczenie przed uruchomieniem > kilku kopii programu przez tego samego usera. Gdy > user jest zalogowany to ma wartość '1' i gdy ktoś inny > próbuję się zalogować na jego konto to wyskakuje > komunikat, że logowanie jest zabronione. > > > Dzięki z gory. Pozdrawiam.
W widoku pg_stat_activity możesz zobaczyć kto jest zalogowany.
-- P.M.
hubert depesz lubaczewski - 24-12-2006 00:37
On 2006-12-12, Krzysztof Raczkowski <raczkowk@poczta.wp.pl> wrote: > A czy przypadkiem we wcześniejszych wersjach problemu nie rozwiążą > user_locks z katalogu contrib ?? Może są sprzątane jak sesja zostanie > zerwana ... nie używałem jeszcze więc nie wiem :)
nie wiem - nie bawiłem się. najprawdopodobniej rozwiążą.
depesz
-- http://www.depesz.com/ -> nowy, jeszcze lepszy, depesz
Kamil Zeno - 24-12-2006 00:37
[ciacho]
Dzięki wszystkim za odpowiedź. Wypróbuję podane przez Was rozwiązania i zobaczę, które będzie mi najlepiej pasować.
Pozdrawiam.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
[postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
[MySQL] Problem z zapisem danych w bazie danych
Problem z mysql - can't connect to MySQL/nietypowo...
plik corel 11 na corel 8 = problem z otwarciem
zanotowane.pldoc.pisz.plpdf.pisz.pllisinski.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|