inchidere fereastra

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

inchidere fereastra

Mesajde Mister » Sâm Sep 24, 2016 11:31 pm

Salut, imi puteti spune si mie cum pot face cu acest script?

Cod: Selectaţi tot

 <head>
            <script type="text/javascript">
                flag=true;
                window.onbeforeunload = function(){if(flag)return "Warning you are still logged in, are you sure?";};
            </script>
        </head>

Deci acest script spune, ca daca inchid fereatra sa ma avertizeze inainte, si asa face, doar ca ma avertizeaza si daca dau refresh, eu vreau doar daca inchid pagina, ce trebuie sa ii fac?



Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Mar Sep 27, 2016 8:35 pm

Bump, scriptul de sus imi da mesaj si cand dau resfreh, eu vreau sa imi dea doar cand parasesc siteul, iar siteul meu este definit in aceasta variabila
Config::$_PAGE_URL si am linkuri asa catre pagini
<a href="<?php echo Config::$_PAGE_URL; ?>rs"> RS Page</a>
am tot cautat functii pe net dar nu am gasit

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Re: inchidere fereastra

Mesajde Birkoff » Mie Sep 28, 2016 2:10 am

ia vezi aici: http://www.w3schools.com/jsref/met_docu ... stener.asp

Cod: Selectaţi tot

    window.addEventListener("beforeunload", function (e) {
      var message = "atentie, se inchide pagina";

      (e || window.event).returnValue = message;     
      return message;                           
    });
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Sâm Oct 01, 2016 12:44 pm

Birkoff scrie:ia vezi aici: http://www.w3schools.com/jsref/met_docu ... stener.asp

Cod: Selectaţi tot

    window.addEventListener("beforeunload", function (e) {
      var message = "atentie, se inchide pagina";

      (e || window.event).returnValue = message;     
      return message;                           
    });

Nu merge, nu cre ca ai inteles ce vreau eu, scriptul meu merge perfect, doar ca intervine si cand dau refresh sau intru pe alta pagina din folderul meu de pe localhost, eu am linkuri in indexul meu din localhost, si nu vreau sa primesc mesajul cand dau click pe linkuri, vreau sa primesc doar cand inchid tabul sau inchid browserul

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Sâm Oct 01, 2016 4:34 pm

Nu cred ca exista solutie la ce doresti tu (functii distincte pentru Refresh si Close oricum nu exista), dar cred ca nici nu este necesar. Ce cod vrei sa rulezi la Close si nu vrei sa rulezi la Refresh? Logout? Si daca pica net-ul ce faci, ramii logat?
Se pot face doar niscaiva artificii, cum ar fi sa verifice daca fereastra pe care o inchizi are sau nu o fereastra parinte, sau ce buton este actionat la click, dar nu exista garantii ca functioneaza pentru toate browserele. Am vazut si variante ca unii pun in pagina un input hidden cu o anumita valoare si in functie de click se activeaza un flag care este apoi iterpretat. Poti sa incerci astfel de artificii, depinde ce doresti.

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: inchidere fereastra

Mesajde nevvermind » Sâm Oct 01, 2016 6:08 pm

Nu cred sa existe eveniment JS care se ocupa *doar* de tab close.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Sâm Oct 01, 2016 11:38 pm

Sesiunea de logout vreau sa o fac, pentru ca userii raman logati, am la <head>

Cod: Selectaţi tot

      <meta http-equiv="refresh" content="900;url=<?php echo Config::$_PAGE_URL; ?>logout">

in caz ca useru sta logat pe pagina mai mult de 900 de secunde sa il delogheze automat, dar nu am nimic daca userul inchide browserul sau pagina, ramane logat. Sesiunea de login e asa
$_SESSION['user'] = $row->ID; // id reprezinta coloane din tabelul users
si la logout am asa

unset($_SESSION['user']);
session_destroy();

si queryurile care seteaza logat in baza de date

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Dum Oct 02, 2016 10:35 am

Sint mai multe cai de rezolvare. Una ar fi sa creezi un cimp datetime in baza de date cu momentul logarii userului si rulezi o functie Ajax() la un anumit interval (ex. 5 minute) sa verifice daca este logat sau nu si daca logarea este mai veche il delogheaza.
Alta ar fi sa sa lucrezi cu functiile

Cod: Selectaţi tot

session_set_cookie_params(0);
session_start();

0 inseamna ca sesiunea va fi inchisa cind se inchide browserul, iar instructiunea se plaseaza inainte de session_start();
Alta cale ar fi (daca ai un singur <body>):
<body onunload = "logout();"> dar asta iar depinde de browser. Eu as aplica prima varianta, cu cimp datetime si ajax.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Dum Oct 02, 2016 11:09 am

vekand scrie:Sint mai multe cai de rezolvare. Una ar fi sa creezi un cimp datetime in baza de date cu momentul logarii userului si rulezi o functie Ajax() la un anumit interval (ex. 5 minute) sa verifice daca este logat sau nu si daca logarea este mai veche il delogheaza.
Alta ar fi sa sa lucrezi cu functiile

Cod: Selectaţi tot

session_set_cookie_params(0);
session_start();

0 inseamna ca sesiunea va fi inchisa cind se inchide browserul, iar instructiunea se plaseaza inainte de session_start();
Alta cale ar fi (daca ai un singur <body>):
<body onunload = "logout();"> dar asta iar depinde de browser. Eu as aplica prima varianta, cu cimp datetime si ajax.

Ok dupa ce seteaza campul logat = 1 in login.php am adaugat sa seteze si loggedtime (noua coloana) current_time_stamp si seteaza corect data-ora in tabel, dar cu ajaxul cum fac?
asta e ajax sau e cu totul altceva?

Cod: Selectaţi tot

setTimeout(function(){
    $.ajax({
    url: "<?php echo base_url('logout');?>",
});

}, 10000);

si am pus din 10 in 10 secunde ca sa verific delogarea sa vad daca merge mai intai fara if de comparare dintre cele 2 date

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Dum Oct 02, 2016 12:19 pm

Din codul asta nu pot sa-ti spun mare lucru. Trebuie sa verifici (in success:) ce anume intoarce functia ajax:
Un exemplu de functie ajax folosita de mine:

Cod: Selectaţi tot

var id =1;
var flag = 1;
   var data_json = {
   "id" : id,
   "flag" : flag
   };           
   function my_ajax(phpfile, data_json, type) {
   $.ajax({
   async : false,
   type : type,
   url : phpfile,
   data : data_json,
   success : function(msg) {
   alert(msg);
   }
   });
   my_ajax("fisier.php", data_json, "post");
   }   

iar in acel fisier.php trebuie sa ai un

Cod: Selectaţi tot

echo $variabila;
care sa fie preluata de ajax la intoarcere (se preia in msg). Adapteaza la cerintele tale.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Dum Oct 02, 2016 1:34 pm

nu inteleg de unde "post" de unde myajax, nu trebuia sa fie un timer sa verifice un if dintre 2 date?

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Dum Oct 02, 2016 2:02 pm

Eu am afisat forma generala completa (nu cazul tau), credeam ca e simplu sa adaptezi la forma specifica (apelarea in timer si compararea timestamp).
Daca nu reusesti posteaza si te ajutam, dar mai intii incearca tu si vezi ce intoarce ajax. Si pune codul din fisierul PHP.

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Dum Oct 02, 2016 2:13 pm

am pus am pus si fisierul meu dar nu prea inteleg de unde si de unde sunt variabilele, nu am lucrat cu ajax si nici nu prea inteleg ce face sau ce e
Deci eu am variabila in baza de date cu timul de cand sa logat mai departe ce trebuie sa fac inafarade iful de comparare current time si cel din bza de date?

vekand
Average Member
Mesaje: 83
Membru din: Dum Mai 03, 2015 9:15 am

Re: inchidere fereastra

Mesajde vekand » Dum Oct 02, 2016 3:31 pm

Uite un exemplu facut chiar acum, dar care imi functioneaza la interval 5 secunde (am testat numai ajax):

Cod: Selectaţi tot

<script type="text/javascript">
   $( document ).ready(function() {update();});
   function update() {
         var userid = user_id;   // id-ul userului pe care il verifici - vine din html ex. document.getElementById("user").value
         var data_json = {
   "userid" : userid
   };
   $.ajax({
      method: 'GET',
      url: 'fisier.php',
      data: { userid: userid}
           success : function(msg) {
         alert('Timestap este:' + msg);
     }
   })   
   setTimeout(update, 5000);
       }
</script>

iar in fisier.php ai putea avea (nu am testat, deci este PSEUDOCOD):

Cod: Selectaţi tot

<?php
$userid  = GET['userid'];
$verify = select NOW(); // verifica timestamp la momentul apelarii  (2016-10-02 14:51:09)
$logged = select loggedtime from users where user_id = userid; // extrage timestamp la momentul logarii
$expire_stamp = $logged('Y-m-d H:i:s', strtotime("+5 min")); // adauga 5 minute
if ($expire_stamp < $verify) {
update users set logat = 0 where user_id = userid;
}
echo $logged; // trimite catre ajax variabila extrasa
?>

Mister
Junior Member
Mesaje: 43
Membru din: Joi Feb 11, 2016 7:41 pm

Re: inchidere fereastra

Mesajde Mister » Dum Oct 02, 2016 4:10 pm

ok deci al 2lea cod il pun in login.php dar pe primul unde il pun?

Asta trebuie la login.php adica dupa ce m-am logat?

Cod: Selectaţi tot

$time = Config::getData(Config::$accounttabel,"loggedtime",$_SESSION['user']);   
                   $today = date("Y-m-d H:i:s");
                  $expire_stamp = $logged('Y-m-d H:i:s', strtotime("+5 min")); // adauga 5 minute
                  if ($time < $today)
                  {
                     echo 'expired time?';
                  }
                  echo $logged; // trimite catre ajax variabila extrasa


iar asta trebuie pusa unde?

Cod: Selectaţi tot

        <script type="text/javascript">
                     $( document ).ready(function() {update();});
                     function update() {
                         var userid = $_SESSION['user'];   // id-ul userului pe care il verifici - vine din html ex. document.getElementById("user").value
                         var data_json = {
                     "userid" : userid
                     };
                     $.ajax({
                       method: 'GET',
                       url: 'logout.php',
                       data: { userid: userid}
                           success : function(msg) {
                         alert('Timestap este:' + msg);
                      }
                     })   
                     setTimeout(update, 5000);
                        }
                  </script>
Ultima oară modificat Dum Oct 02, 2016 4:22 pm de către Mister, modificat 1 dată în total.


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 97 vizitatori