Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Domyślna wartość, Pytanie
Rid
post 29.12.2010, 18:48:35
Post #1





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Czy istniej możliwość przywrócenia domyślnej wartości w danej kolumnie w bazie mysql po zamknięciu przeglądarki.
Coś w rodzaju auto DEFAULT.
Go to the top of the page
+Quote Post
tehaha
post 29.12.2010, 19:05:53
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


może napisz wprost co próbujesz zrobić? jeżeli chcesz, żeby pewne informacje były dostępne tylko na czas odwiedzin to masz sesję do tego
Go to the top of the page
+Quote Post
Rid
post 29.12.2010, 19:19:51
Post #3





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Mam ustawioną wartość domyślną w bazie danych na nieaktywny,kiedy uruchomie skrypt chcę zmienić na aktywny,po zamknięci przeglądarki ,automatyczny powrót do wartości domyślnej coś ala reset.Hmm nie wiem czy to możliwe?questionmark.gif
Go to the top of the page
+Quote Post
markonix
post 29.12.2010, 19:21:40
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


No a nie możesz po prostu ustawić wartości z powrotem na nieaktywny?
Tak czy siak jakieś zapytanie do bazy musisz wykonać więc nie widzę sensu szukania jakiejś dedykowanej funkcji.


--------------------
Go to the top of the page
+Quote Post
Rid
post 29.12.2010, 19:26:20
Post #5





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Cytat
No a nie możesz po prostu ustawić wartości z powrotem na nieaktywny?
Po zamknięciu przeglądarki cokolwiek ustawić jest ciężko ,a wręcz niemożliwe. Próbuję się dowiedzieć czy sama baza posiada taką funkcję.

Ten post edytował Rid 29.12.2010, 19:27:00
Go to the top of the page
+Quote Post
tehaha
post 29.12.2010, 20:28:07
Post #6





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


to zamiast ustawiać status aktywny/nieaktywny, w bazie zapisuj ostatni czas aktywności i na podstawie tego ustalisz czy użytkownik jest online czy nie, możesz dawać aktualizację tego czasu przy każdym odświeżeniu strony, lub przy pomocy AJAXA tak często jak potrzebujesz np. co minutę

Ten post edytował tehaha 29.12.2010, 20:30:02
Go to the top of the page
+Quote Post
Rid
post 29.12.2010, 21:54:54
Post #7





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Cytat
to zamiast ustawiać status aktywny/nieaktywny, w bazie zapisuj ostatni czas aktywności i na podstawie tego ustalisz czy użytkownik jest online czy nie, możesz dawać aktualizację tego czasu przy każdym odświeżeniu strony, lub przy pomocy AJAXA tak często jak potrzebujesz np. co minutę


Z tego ,co piszesz ostatni zapis minus przesunięcie czasu np.15min -po 15minutach jeśli nieodświeżane aktywność upływa- to jest aktywność użytkownika -system ten zastosowałem ,ale u mnie ma służyć jako zabezpieczenie przed ponownym (kolejnym)zalogowaniem-w rezultacie zdaje to egzamin,do czasu jak użytkownik zamknie przeglądarkę-wtedy będzie musiał czekać ,aż okres aktywności minie aby, ponownie się zalogować.
Updadate co minutę do bazy danych zbytnio obciąży bazę mysql.
W rezultacie myślę ,nad w/w rozwiązaniem ,które wydaje mi się najbardziej optymalne i najłatwiejszym do wykonania i ile to jest możliwe,czy baza mysql sama w sobie może powrócić do wartości default(domyślnej)questionmark.gifquestionmark.gifquestionmark.gif

Ten post edytował Rid 29.12.2010, 21:55:48
Go to the top of the page
+Quote Post
Zyx
post 29.12.2010, 22:11:11
Post #8





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


A skąd niby baza danych ma wiedzieć, że ktoś zamknął przeglądarkę, kiedy ona nawet nie wie, że istnieje coś takiego, jak przeglądarka? Podstawy działania aplikacji PHP się kłaniają.

Do problemu zabierasz się od niewłaściwej strony. Nie prościej po prostu ustawić ciastko z określonym czasem aktywności? Wtedy nawet wyłączenie i ponowne włączenie przeglądarki nie usunie go, a użytkownik dalej będzie mieć swoją niewylogowaną sesję.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
Rid
post 29.12.2010, 22:21:43
Post #9





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


A więc niemożliwe.Jeśli chodzi o podtrzymanie sesji przez cookies to , już to zrobiłem ,mam zabezpieczenie przed przechwyceniem sesji ,jeszcze próbuje zrobić zabezpieczenie przed kolejnym zalogowaniem z innego komputera i innej przeglądarki.Nie chciałbym ,aby użytkownik albo użytkownicy miał/mieli prawo do zalogowania na jedno konto z wielu lokacji.
Go to the top of the page
+Quote Post
kulczycki
post 29.12.2010, 22:39:20
Post #10





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


no to ja już tak chcesz. To w cookies masz session_key, w bazie masz tabela np.
session_key
session_ip
session_time
session_browser


i sprawdzasz

co do:
Cytat
Nie chciałbym ,aby użytkownik albo użytkownicy miał/mieli prawo do zalogowania na jedno konto z wielu lokacji.


Dajesz w bazie kont kolumne lockaccount i przy logowaniu sprawdzasz czy ostatnie ip jest równe ip klienta. Co do wielu lokacji - albo przy logowaniu usuwa ostatnia sesje lub wyswietla komunikat ze konto jest zalogowane. Lepsze 1 rozwiązanie


Ten post edytował kulczycki 29.12.2010, 22:41:14
Go to the top of the page
+Quote Post
Rid
post 29.12.2010, 23:07:15
Post #11





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Cytat
Dajesz w bazie kont kolumne lockaccount i przy logowaniu sprawdzasz czy ostatnie ip jest równe ip klienta. Co do wielu lokacji - albo przy logowaniu usuwa ostatnia sesje lub wyswietla komunikat ze konto jest zalogowane. Lepsze 1 rozwiązanie


1 rozwiązanie nie jest dobre,co sieciami osiedlowymi -wielu użytkowników jedno IP -jednego użytkownika wpuścisz ,resztę poblokujesz ,co do drugiego rozwiązania nie wiem za bardzo, o co chodzi z tym usuwaniem sesji.
Go to the top of the page
+Quote Post
kulczycki
post 30.12.2010, 00:10:51
Post #12





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


Co do 1 rozwiązania dałem Ci przykładowo - zawsze można rozwinąć. Co do drugiego. Session_key i dane o sesji trzymasz w tabeli w bazie. Wiec jesli ktoś się loguje na usera który ma aktywną sesje to się nie zaloguje, lub po prostu wywala tą osobę/połączenie które ma aktywną sesje.

account:
acc_id
username

session:
acc_id
session_key
session_time
session_ip
session_browser

Teraz mniej więcej rozumiesz ?

Lockaccount się stosuje jako dodatek, i każdy klient może sam sobie to nałożyć (jeśli ma np stałe ip i wie że jest sam w sieci). Jeśli ktoś jest w sieci osiedlowej nie po blokuje nikogo bo przecież mają te same ip.

Ten post edytował kulczycki 30.12.2010, 00:12:52
Go to the top of the page
+Quote Post
Rid
post 30.12.2010, 00:33:48
Post #13





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Dziękuję za zainteresowanie!!Nie wiem może ja coś,źle robię ale za każdym razem Sesion_key się zmienia,jedyny zapis do bazy odbywa się poprzez Update.W moim przypadku wiąże się to z:
  1. lub po prostu wywala tą osobę/połączenie które ma aktywną sesje.
,a chciałbym uzyskać efekt odwrotny.Jakoś nie mogę sobie z tym poradzić sciana.gif
Go to the top of the page
+Quote Post
kulczycki
post 30.12.2010, 00:41:58
Post #14





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


Cytat
Nie wiem może ja coś,źle robię ale za każdym razem Sesion_key się zmienia,jedyny zapis do bazy odbywa się poprzez Update
.

Session_key musi być stały podczas sesji. Session_key tworzysz wyłącznie podczas próby zalogowania jeśli wszystkie warunki się zgadzają.
Podczas odświeżania strony podbijasz tylko session_time na aktualny czyli time().

Cytat
a chciałbym uzyskać efekt odwrotny.Jakoś nie mogę sobie z tym poradzić

Powiedzmy sobie że są dwie tabele account i account_session. W skrócie wyglądają one tak

account:
account_id
username
passwrod


account_session:
account_id
session_key
session_time
session_ip
session_browser



I przykładowo 1 klient się loguje wszystkie warunki się zgadzają. Aktywnej sesji dla danego użytkownika nie ma, to dodajesz wpis do tabeli account_session. Teraz przychodzi drugi klient i chce się zalogować na tego samego użytkownika (Po loginie sprawdzasz jego account_id i sprawdzasz w account_session) Podczas sprawdzania warunków musisz zrobić jeden tak by sprawdził czy dla danego użytkownika jest sesja i czy jest ona aktywna czyt. session_time (session_time >= ( time() - 900 ) dla 15minut). Jesli jest wyświetla komunikat że jest aktywna sesja i nie można się zalogować, jeśli nie ma aktywnej sesji jedzie dalej z logowaniem i tworzysz sobie session_key i dodajesz wpis do tabeli account_session.

Ten post edytował kulczycki 30.12.2010, 00:44:49
Go to the top of the page
+Quote Post
Rid
post 30.12.2010, 14:51:20
Post #15





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Cytat(Zyx @ 29.12.2010, 22:11:11 ) *
A skąd niby baza danych ma wiedzieć, że ktoś zamknął przeglądarkę, kiedy ona nawet nie wie, że istnieje coś takiego, jak przeglądarka? Podstawy działania aplikacji PHP się kłaniają.

Czytałem właśnie o wyzwalaczach -w bazie dany oracle jest napisane
Cytat
wyzwalacze wykonywane są gdy struktura bazy (struktura tabeli) jest modyfikowana oraz gdy użytkownik łączy się lub rozłącza z bazą danych.
więc możliwa jest modyfikacja bazy po rozłączeniu z bazą danych ,nie wiem jak z mysql
.Nie za dużo pisze się tutaj o wyzwalaczach:(
Go to the top of the page
+Quote Post
phpion
post 30.12.2010, 14:54:02
Post #16





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Rid @ 30.12.2010, 14:51:20 ) *
więc możliwa jest modyfikacja bazy po rozłączeniu z bazą danych ,nie wiem jak z mysql

Tylko weź pod uwagę, że w większości przypadków skrypt działa tak: łączy się z bazą, pobiera dane, rozłącza. Czyli w efekcie będziesz miał zdarzenie rozłączenia z bazą danych w momencie wczytania strony, a nie fizycznego jej opuszczenia przez użytkownika. Do tego mylisz nieco pojęcia: użytkownik strony to nie użytkownik bazy danych. Przecież wszyscy użytkownicy strony korzystają z tych samych danych dostępowych do bazy danych (login + hasło) zapisanych gdzieś w konfiguracji.
Go to the top of the page
+Quote Post
kulczycki
post 30.12.2010, 15:01:53
Post #17





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


Cytat
więc możliwa jest modyfikacja bazy po rozłączeniu z bazą danych ,nie wiem jak z mysql
.Nie za dużo pisze się tutaj o wyzwalaczach:(

Po to masz session_time i sprawdzasz czy aktywne dla wszystkich mozesz wykonywac query co np. 5 minut.
  1. UPDATE `account` SET `ta_wartosc` = `wartosc_domyslna` WHERE account_id IN(SELECT account_id FROM `account_session` WHERE `session_time` < time()-900);


Ten post edytował kulczycki 30.12.2010, 15:02:48
Go to the top of the page
+Quote Post
Rid
post 30.12.2010, 15:12:48
Post #18





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Wszystko jest dobre w twojej metodzie,jednakże badanie aktywności w oparciu o czas ,ma swoją wadę.Jeśli użytkownik ,się wyloguje wszystko jest ok,a co jeśli użytkownik zamknie przeglądarkęquestionmark.gif?W bazie danych pozostanie on aktywny,do upłynięcia czasu aktywności ,przez ten okres nie będzie mógł się ponownie zalogować.
Temat także opisałem:tutaj

Ten post edytował Rid 30.12.2010, 15:17:08
Go to the top of the page
+Quote Post
phpion
post 30.12.2010, 15:23:08
Post #19





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Istnieje jeszcze jedna metoda: co X sekund wysyłaj AJAXem żądanie do skrypty, który będzie aktualizował czas ostatniej "akcji" użytkownika. Nawet jeśli będzie siedział na stronie i ją długo czytał (nie przechodzi na kolejne strony) to będziesz miał o tym informację.

Pewnie padnie: "ale ja nie znam AJAXa" więc: jQuery.ajax()
Go to the top of the page
+Quote Post
Rid
post 30.12.2010, 20:26:45
Post #20





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Wpadłem na pomysł-jak sprawdzić aktywność na stronie i nadać status użytkownika aktywny/nieaktywny.
Większość osób wizualną część swojej strony tworzy na podstawie szablonów CSS-czyli tzw divach-ja również.
W divach(blokach) umieszczane są elementy,tła do późniejszej graficznej obróbki.
Div także obsługuje zdarzenia:
  1. onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown, onkeyup
.Na podstawie tych zdarzeń ,możnaby ustalić aktywność.Co o tym Sądzicie?questionmark.gif?Chyba niezła metoda??
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 11:29