Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Domyślna wartość
Forum PHP.pl > Forum > PHP
Rid
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.
tehaha
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
Rid
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
markonix
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.
Rid
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ę.
tehaha
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ę
Rid
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
Zyx
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ę.
Rid
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.
kulczycki
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
Rid
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.
kulczycki
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.
Rid
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
kulczycki
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.
Rid
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:(
phpion
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.
kulczycki
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);
Rid
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
phpion
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()
Rid
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??
kulczycki
A jak Ty tym chcesz się odwołać do przeglądarki ?
Rid
onmousemove w divie gdzie jest umieszczone tło strony-poruszenie myszką -będzie generować jakąś zmienną na true.
onkeypress,onclick w divach gdzie znajdują się obiekty -będzie generować jakąś zmienną na true.
Jeśli jeden z tych warunków spełniony(true)-zapis do bazy aktywny
15 minut bezczynności -żadnego ruchu myszą,kliknięcia myszką ,naciśnięcia przycisku na klawiaturze-jakś zmienna=false
jeśli false-zapis do bazy nieaktywny.
Jeśli aktywny=nie pozwól się zalogować ,kolejnej osobie.Taki mój pomysł.
Poza tym -CSS to programowanie klient-size-wydaje mi się że nawet zapis do bazy byłby zbędny:/
tehaha
więcej wcale nie znaczy lepiej, Twoje nadgorliwe kombinacje doprowadzą do tego, że strona będzie uciążliwa dla użytkownika i będzie duże obciążenie serwera,a nie będziesz miał z tego żadnej korzyści.

Po co w ogóle monitorować jakiś ruch myszkąquestionmark.gif wystarczy wysyłać przy pomocy ajax update do bazy cyklicznie np. co minutę i aktualizować timestamp. I to na prawdę wystarczy. Przy logowaniu na podstawie tego pola sprawdzasz czy w ostatniej minucie była aktywność, jak tak to blokujesz możliwość logowania.

tak na marginesie:
Cytat
Poza tym -CSS to programowanie klient-size-wydaje mi się że nawet zapis do bazy byłby zbędny:/

css to styl nadawany elementom html, skrypty client-side to np. javascript

Cytat
tworzy na podstawie szablonów CSS-czyli tzw divach


struktura strony jest budowany przy pomocy html, css to tylko styl


P.S. to rozwiązanie już Ci kilka osób tutaj podało a Ty dalej swoje kombinacje uskuteczniasz, które niestety prowadzą donikąd
Rid
Cytat(tehaha @ 31.12.2010, 00:52:55 ) *
P.S. to rozwiązanie już Ci kilka osób tutaj podało a Ty dalej swoje kombinacje uskuteczniasz, które niestety prowadzą donikąd

Proszę się nie bulwersować ,ja po prostu rozważam możliwości i pytam o opinie mądrzejszych od siebie.
PS.Więc już dwie osoby zaproponowały jednomyślnie użycie Ajaxa-chciałem to zrobić w czystym PHP,ajaxem się jeszcze się nie bawiłem ,no cóż trzeba będzie to nadrobić.
PS.
Cytat
wystarczy wysyłać przy pomocy ajax update do bazy cyklicznie np. co minutę i aktualizować timestamp.

Nie obciązy to zbytnio bazy?questionmark.gif?
thek
Zależy od ilości ludzi i popularności serwisu. Jak dla mnie co minutę to za często. Takie coś powinno być robione raz na kilka minut. Tabelę aktywności dobrze rozwiązać tak, że:
1) Każde przejście linkami zapisuje do tabeli aktywności: usera, skąd przyszedł, gdzie jest i kiedy to zrobił (id zarejestrowanego, user_agent, ip whatever co pozwoli jednoznacznie zidentyfikować usera, a do tego referer, self(nazwa własna skryptu wskaże co robi) i timestamp). Odpalasz funkcję to robiącą na starcie każdego skryptu i już wiesz kiedy ostatnia akcja była wykonana oraz co to było.
2) Siedzenie na stronie i oczywiście czytanie pozwala działać AJAXowi, który odświeża stan aktywności w tejże tabeli co kilka minut. Przedobrzanie z częstotliwością nie ma sensu. Jeśli ktoś czyta to i tak zajmie mu to kilka minut. Jeśli czyta szybko to kliknie w jakiś nowy link i zadziała procedura pod punktem 1), a więc oszczędzasz czas i moc serwera bez zbędnego obciążania go AJAXowymi wywołaniami
3) zamknięcie przeglądarki sprawi, że skrypt sprawdzający aktywnych userów zaakceptuje tylko tych, którzy mają czas aktywności mniejszy niż X minut temu. Pozostałych oleje i nawet jeśli baza nie oznacza ich jako wylogowanych, to brak odświeżania tabeli AJAXem jednoznacznie wskazuje, że przeglądarka jest zamknięta lub ma wyłączony JS (bardzo znikomy procent użytkowników to robi) i w teorii możesz wtedy ich jako wylogowanych oznaczyć na pałę (nie rób tego jednak z racji tego możliwego wyłączonego JS). A chyba o to chodzi?
bim2
Thek, z tego co zrozumiałem to on nie chce aby użytkownik mógł zalogować się podwójnie. Nie wiem, może to jakaś gra online czy coś podobnego. Więc tutaj przydałyby się częste odświeżania inaczej po zamknięciu przeglądarki nie będzie opcji zalogowania się tak od razu a dopiero po tych kilku minutach.
Rid
Cytat
Pozostałych oleje i nawet jeśli baza nie oznacza ich jako wylogowanych, to brak odświeżania tabeli AJAXem jednoznacznie wskazuje, że przeglądarka jest zamknięta lub ma wyłączony JS (bardzo znikomy procent użytkowników to robi) i w teorii możesz wtedy ich jako wylogowanych oznaczyć na pałę (nie rób tego jednak z racji tego możliwego wyłączonego JS). A chyba o to chodzi?

To ajax a raczej biblioteka j query , nie będzie odświeżać strony ,jak użytkownik ma wyłączoną obsługę JS w przeglądarce?questionmark.gif
tehaha
no jquery to biblioteka javascript, więc nie będzie działać z wyłączonym js, no niestety coś za coś, dlatego wykonanie takiego ograniczenia powinieneś wykonać tylko, jeżeli jest to konieczne
Rid
Dlatego niezbyt chciałem używać -JS bo w bardzo prosty sposób można wyłączyć obsługę.Hmm zastanawiam się nad XML-czy da rady tam zrobić coś takiego jak w ajaxie.Z tego co wiem Ajax opiera się na tej technologii.
tehaha
kompletnie mylisz pojęcia, XML - służy do reprezentacji struktury danych, nie napiszesz w nim skryptu, jak nie chcesz używać js to zostaje tylko php, ale to będzie bardzo uciążliwe bo musiałbyś to ustawić co jakieś 15min, a wtedy po wyłączeniu przeglądarki użytkownik nie będzie mógł się logować przez 15min, więc rozwiązanie nie praktyczne. Jeżeli nie robisz gry online, albo serwisu gdzie płaci się za dostęp to odpuść sobie tą blokadę równoległego logowania, bo nic Ci nie daje w przypadku zwykłych serwisów.
bim2
Rid, ty chcesz tutaj ludzi załamać? Bo ja jetem załamany jak wielka może być ludzka głupota. Tyle doświadczonych osób radzi ci to samo, jak rozwiązać twój problem w 1 identyczny sposób a sobie kpisz trochę z nas. Jeśli kilka doświadczonych osób pisze ci, że można zrobić to tylko tak to nie ma sensu zadawać pytań a XML, a może HTML. Najlepiej wytłumacz do czego potrzebujesz takiego sprawdzania, bo jeśli nie do gry online (która defakto powinna działać z użyciem ajaxa jeśli potrzebne jest takie sprawdzanie) to nie ma sensu się w to pakować. Ja widzę zastosowanie czegoś takiego tylko w grze typu LIVE (Tibia, WoW itp.).
Rid
Cytat
XML to daleko więcej niż możliwość budowania własnych znaczników. Jak twierdzą specjaliści, XML jest przede wszystkim narzędziem do wymiany informacji między maszynami, co w dobie globalizującego się świata ma szczególną wagę.

Mi chodzi o wymianę informacji- między
Cytat
php -Xml-php
..........I........
serwer mysql
,a dokładnie jednej zmiennej z czasem.Hmm.
bim2
Rid, proponuje Ci że skoro tak się znasz to spokojnie możesz to zrealizować samemu. Nie ma sensu zaśmiecać forum.
Rid
Po prostu chcę u niknąć takiego czegoś ,jak to zrobiłem na tym forum.Poszły dwa requesty w jednakowym czasie z dwóch różnych przeglądarek

Temat do zamknięcia.
tehaha
Niestety kłania się u Ciebie kompletny brak podstaw, XML to format danych w jakich możesz przesyłać informacje, które są wysyłane/odbierane przez php/ajax, wyłapujesz jakieś zdania, które błędnie interpretujesz właśnie przez ten brak podstawowej wiedzy, a niestety sama ambicja bez niezbędnej wiedzy nie wiele Ci da, bo nie wiem jak chcesz połączyć różne języki skryptowe i znacznikowe, skoro ich nawet nie odróżniasz, najlepiej poszukaj jakieś kursy online i przyswój jakąkolwiek elementarną wiedzę zanim cokolwiek zaczniesz

Cytat
Poszły dwa requesty w jednakowym czasie z dwóch różnych przeglądarek

no i co w związku z tym? jakoś serwer to wytrzymał i forum dalej działa
Rid
Cytat(tehaha @ 31.12.2010, 13:47:07 ) *
Niestety kłania się u Ciebie kompletny brak podstaw, XML to format danych w jakich możesz przesyłać informacje, które są wysyłane/odbierane przez php/ajax, wyłapujesz jakieś zdania, które błędnie interpretujesz właśnie przez ten brak podstawowej wiedzy, a niestety sama ambicja bez niezbędnej wiedzy nie wiele Ci da, bo nie wiem jak chcesz połączyć różne języki skryptowe i znacznikowe, skoro ich nawet nie odróżniasz, najlepiej poszukaj jakieś kursy online i przyswój jakąkolwiek elementarną wiedzę zanim cokolwiek zaczniesz


no i co w związku z tym? jakoś serwer to wytrzymał i forum dalej działa

A co jakby było ich 1000??Dzięki za naprowadzenie na języki skryptowe znalazłem coś lepszego niż Ajax- Python-warto się tego pouczyć ,niż JS
tehaha
Cytat
A co jakby było ich 1000??Dzięki za naprowadzenie na języki skryptowe znalazłem coś lepszego niż Ajax- Python-warto się tego pouczyć ,niż JS

Twoje paranoiczne lęki są kompletnie nieuzasadnione...chyba się za dużo filmów naoglądałeś, gdzie hackerzy wszystkich krajów łączą sięsmile.gif Dopóki użytkownik nie posłuży się jakimś botem to nic Ci nie zrobi, a przed botem i tak się tym nie zabezpieczysz, lepiej skup się na zabezpieczaniu przez XSS i injection, bo skupiasz się tam gdzie nie trzeba, a pewnie cała reszta będzie dziurawa
kulczycki
Cytat
Ja widzę zastosowanie czegoś takiego tylko w grze typu LIVE (Tibia, WoW itp.).

Jako że biore udział w projekcie MaNGOS, nicku nie zdradzam. I na oficjalnych serwerach i tych mniej legalnych wygląda to tak że jeśli ktoś jest zalogowany i ktoś inny się loguje to poprzednią osobę wywala. Tak samo działają systemu bankowe i wszystko inne. AJAX jasne że tak.

Cytat
Ajax- Python

Python to całkiem inny język i tak i siak nie osiągniesz tego co chcesz bo byś MUSIAŁ SIĘ ODWOŁAĆ DO STRUKTURY PRZĘGLĄDARKI.

Cytat
niż JS

A ajax czym jest ? http://en.wikipedia.org/wiki/Ajax_(programming)

Jedynym rozwiązaniem jest napisanie swojej własnej mini przeglądarki np w VISUAL BASIC i podczas zamykania aplikacji niech wysyła informacje na serwer. smile.gif
Mephistofeles
Napisz rootkita (żeby go nikt łatwo nie usunął), który będzie przechwytywał zamknięcie przeglądarki. Daj sobie lepiej spokój z takimi zabezpieczeniami, bo jak ktoś będzie chciał to i tak je złamie (patrz PS3 - odkąd usunęli Other OS prace nad złamaniem konsoli bardzo przyspieszyły no i mamy rezultat).
thek
@bim2: a czy ja pisałem, że może lub nie może koleś z 2 przeglądarek wchodzić? Żadnej blokady nie ustawałem smile.gif Traktuję useragenta jedynie do określania unikalności usera i tyle. Najbezpieczniej jest, w razie gdy zaloguje się ten sam user z innym IP lub user-agentem, wylogować starego i zalogować nowego. Sam korzystam z kilku przeglądarek i tak jest najlepiej by uniknąć "dubli". Poza tym przechowuj te ciągi od userów różne. Dzięki temu dowiesz się kilku ciekawych danych statystycznych, a w razie czego będziesz miał fajne narzędzie do logowana poczynań userów. Czy są ze zmiennego czy stałego IP, czy korzystają z różnych przeglądarek, czy je aktualizują. A w razie poważnych odchyłek będziesz mógł zareagować. Przykład? User nagle skorzystał z przeglądarki jakiej do tej pory nie używał, a potem znów wrócił do starej. Możliwe, że ktoś włamał się mu na konto. Podobna sytuacja gdy znikąd użył przeglądarki nieaktualnej o choćby minimalnie w tył i nagle potem znów najnowszej. Można tak wykryć choćby bota. Bo tylko tak naprawdę analizując działania usera możesz wykryć bota smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.