Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ajax onunload onbeforeunload
robert1974
post
Post #1





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

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


probuje na onunload zapisac do bazy ze user opuszcza strone. testuje z Chrome.

przed </body> dodalem cos takiego:

<script>
function ActionUnload()
{
var xmlhttp=new XMLHttpRequest();

xmlhttp.open("GET","storeUnloadAction.php?ref_url="+document.referrer,false);
xmlhttp.send();
}

window.onbeforeunload = function()
{
ActionUnload();
);

</script>

ale nie dziala.
tutaj: xmlhttp.open("GET","storeUnloadAction.php?ref_url="+document.referrer,false);
probuje i z false i z true

Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


window.onbeforeunload = function()
{
ActionUnload();
);

Jeśli testujesz na Chrome, to używaj konsoli (F12), dużo Ci ułatwi.


--------------------
Go to the top of the page
+Quote Post
robert1974
post
Post #3





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

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


wlasnie chwile pozniej znalazlem tan blad, .... tylko teraz nie wiem czemu od razu po otwarciu strony ten event sie wykonuje, i od razu zapisuje sie do bazy wyjscie.

consoli F12, niech no ja to ogarne.

wyglada ze i window.onbeforeunload i window.unload wywoluja mi sie od razu, albo czegos nie rozumiem.



window.unload = function()
{
ActionUnload();

};


window.onbeforeunload = function()
{
ActionUnload();

};

Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Nie wykonują się od razu, ale w minimalnym odstępie.
Czemu przypinasz funkcję do dwóch zdarzeń?


--------------------
Go to the top of the page
+Quote Post
robert1974
post
Post #5





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

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


chodzilo mi o to, ze czy wywolam jedna czy druga to i tak wykonanie nastepuje od razu przy zaladowaniu strony, a ja bym oczekiwal ze to sie wykona dopiero jak wyjde ze strony na jakas inna.
Go to the top of the page
+Quote Post
tzm
post
Post #6





Grupa: Zarejestrowani
Postów: 675
Pomógł: 58
Dołączył: 17.12.2013

Ostrzeżenie: (10%)
X----


Cytat(trueblue @ 28.01.2015, 22:12:33 ) *
Czemu przypinasz funkcję do dwóch zdarzeń?


A co w tym dziwnego?
Go to the top of the page
+Quote Post
trueblue
post
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


window.unload = function()
powinno być
window.onunload = function()


Wprowadź alerty, zerknij czy również są wywoływane przy załadowaniu strony, a nie jej opuszczeniu.


--------------------
Go to the top of the page
+Quote Post
robert1974
post
Post #8





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

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


uff, dziala:

<script>
function ActionUnload()
{
var xmlhttp=new XMLHttpRequest();

xmlhttp.open("GET","storeUnloadAction.php?ref_url="+document.referrer,false);
xmlhttp.send();
}

window.onunload = function()
{
ActionUnload();

};

</script>

z tego co czytam onunload wszystkie przegladarki obsluguja czyli powinno byc OK.

a skad pobiore na ktora (inna) strone wyszedl?







mam jeszcze pytanie zwiazane, choc moze powinienem stworzyc nowy post.


w tej linii kodu podaje nazwe skryptu storeUnloadAction.php albo cos takiego ../moje_skrypty/storeUnloadAction.php

--> xmlhttp.open("GET","storeUnloadAction.php?ref_url="+document.referrer,false);


jesli ktos zobaczy kod strony to wie gdzie znajduje sie dany skrypt php i jak go wywolywac.

jesli dobrze rozumiem, to nie moze zobaczyc jego kodu php, ale czy moze wylistowac wszystkie skrytpy php z katalogu "moje_skrypty" i czy moze je wywolac samodzielnie?

jak sie nalezy przed tym zabezpieczyc?

Go to the top of the page
+Quote Post
trueblue
post
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Cytat(robert1974 @ 29.01.2015, 00:43:56 ) *
a skad pobiore na ktora (inna) strone wyszedl?

Już kiedyś o to pytałeś. Nie ma takiej możliwości, chyba, że kliknął w link na Twojej stronie.
Cytat(robert1974 @ 29.01.2015, 00:43:56 ) *
jesli dobrze rozumiem, to nie moze zobaczyc jego kodu php, ale czy moze wylistowac wszystkie skrytpy php z katalogu "moje_skrypty" i czy moze je wywolac samodzielnie?

jak sie nalezy przed tym zabezpieczyc?

http://stackoverflow.com/a/1607587


--------------------
Go to the top of the page
+Quote Post
robert1974
post
Post #10





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

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


to prawda, tylko zobacz, tako sobie mysle, ... jest takie narzedzie feedjit ktore monitoruje ruch, dodaje go na strone jako pare linijek kodu a on potrafi zebrac info skad ktos przyszedl (to juz mam) ale tez na jaka strone wyszedl (wewnetrze, to prawda, ale rozne) wiec myslalem ze gdzies tu cholerstwo musi byc.

przyklad: http://live.feedjit.com/live/harmonicstube.blogspot.com/0/

dziekuje trueblue

poniewaz moj monitor chodzi juz ponad tydzien to krotki update z obserwacji:
1. rozwiazanie z window.onunload sprawuje sie niezle. 95% wyjsc zapisuje sie do bazy. 5% nie, i jeszcze nie rozgryzlem w jakich przypadkach nie. Wydaje mi sie iz nie jest to skorelowane z typem przegladarki czy OS.

2. przy opuszczaniu strony nie wiem wciaz skad pobrac link gdzie uzytkownik wyszedl, aczkowlwiek ... problem sie sam rozwiazal, poniwaz gdy wyszedl na jakas strone wewnatrzna ktora tez monitoruje to dla niej juz zapisuje sie skad wszedl (a zatem wiadomo skad wyszedl i gdzie wszedl) smile.gif

3. pare razy zdarzylo sie, ze uzytkownik wszedl na 4 rozne pod-strony serwisu w tej samej sekundzie, nie wiem jak to mozliwe, ale tak to sie zarejestrowalo.

pozdrawiam
Go to the top of the page
+Quote Post
trueblue
post
Post #11





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


ad.1 Nie wszystkie przeglądarki/wersje obsługują to zdarzenie. Spróbuj użyć beforeunload, choć nie wiem czy to jakoś wpłynie na wyniki - najzwyczajniej jeśli ajax zostanie przerwany zanim połączy się z serwerem, to fakt nie będzie odnotowany. Możesz jeszcze spróbować z: http://php.net/manual/en/function.ignore-user-abort.php
ad.2 Próbuję Cię przekonać, że nie jest to możliwe.
ad.3 Robot?

Co do punktu 1., kiedyś tworzyłem takie fake rozwiązanie. Sprawdzana była pozycja kursora myszy, jeśli był 10 pikseli od górnej krawędzi, to było to traktowane jako fakt wyjścia ze strony. Niezbyt wyrafinowane, ale takowego nie wymagało.


--------------------
Go to the top of the page
+Quote Post
robert1974
post
Post #12





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

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


Cytat(trueblue @ 2.02.2015, 18:38:55 ) *
ad.1 Nie wszystkie przeglądarki/wersje obsługują to zdarzenie. Spróbuj użyć beforeunload, choć nie wiem czy to jakoś wpłynie na wyniki - najzwyczajniej jeśli ajax zostanie przerwany zanim połączy się z serwerem, to fakt nie będzie odnotowany. Możesz jeszcze spróbować z: http://php.net/manual/en/function.ignore-user-abort.php
ad.2 Próbuję Cię przekonać, że nie jest to możliwe.
ad.3 Robot?

Co do punktu 1., kiedyś tworzyłem takie fake rozwiązanie. Sprawdzana była pozycja kursora myszy, jeśli był 10 pikseli od górnej krawędzi, to było to traktowane jako fakt wyjścia ze strony. Niezbyt wyrafinowane, ale takowego nie wymagało.


ad1. tak, o tym czytalem. Tylko ze na ta chwile nie znalazlem wzorca : kiedy dziala/niedziala dla jakiej konkretnej przegladarki czy OS. Ale wrzuce tego ajaxa dla obu eventow ZAWSZE ... a niech tam, zobaczymy czy sie poprawi.

ad2. no przekonales ... to co jest teraz wystarcza mi smile.gif

ad3 ... zignoruje na razie.
Go to the top of the page
+Quote Post

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 Aktualny czas: 20.08.2025 - 07:11