Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Session destroy i update tabele posle zatvaranja browsera

PHP
  • 11 odgovora
  • 3.928 pregleda

Najnovija ↓

Session destroy i update tabele posle zatvaranja browsera 04.06.2014. u 12:13 · pre 151 mesec #1
Pozdrav ljudi, naisao sam na problem, kao sto tema kaze, da kada se korisnik ne izloguje vec samo zatvori browser se unusti sesija, ali to i nije toliki problem koliko je sto moram da uradim update tabele, i da upisem vreme kada se to desilo. Naime, moram imati upisano vreme zavrsetka rada u aplikaciji, jer se ne moze ulogovati posle toga ako nije upisano vreme. Takav zahtev od klijenta imam. Postoji li nacin da se ovo uradi? Sesiju mogu podesiti da istekne, to nije problem, ali sta da radim sa update-om?
Re: Session destroy i update tabele posle zatvaranja browsera 04.06.2014. u 12:26 · pre 151 mesec #2
session_destroy() je preporučljivo pozivati pre - header('Location:'.$_SERVER['REQUEST_URI']); exit; dakle, pre redirekcije ili refresh-a stranice, kako bi se npr. browser cookie učitao i reflektovao - instant. To je jedan od dobrih scenarija gde funkcija session_destroy() ima svoju ulogu tako što će dopustiti narednom posetiocu koji je tu - odmah nakon pola sekunde npr. da takođe, neometano upiše sebe ili podatke koji su vezani za tog korisnika. Jer, onda kada se 'akaju' sesije, taj jedan sess_sdf98as89g68a ** fajl je zaključan dok se skripta ne izvrši do kraja. Takoreći Locked. session_destroy() završava sa upisom i vezom i sa aktivnim korisnikom, te je samim tim baratanje podataka kroz sesije, precizniji.

Za tačan upis vremena, možeš slobodno koristiti i običnu microtime(true);
Hoćeš li vrednost koju dobijaš sa microtime(true) ubaciti u novi cookie, pa njega maknuti nakon upisa u bazu ili direktno u sesiju, zavisi od same aplikacije, od tebe takoreći.

U suštini mnogo prosto, samo fino obrati pažnju šta gde i kako i kada ćeš, ako ćeš da radiš sa sesijama, koristiti if(!isset($_SESSION['thisAndThat'])) $_SESSION['thisAndThat'] = 'that and that'; *(znači da se taj ključ u sesiji pravi samo jednom ako nije već napravljen) a kada ćeš koristiti unset, tu i tu sesiju.. ili ćeš je generisati iznova, uvek, na svakom requestu.

Zanimljive su te sesije. :)
Potpis
about:networking
Re: Session destroy i update tabele posle zatvaranja browsera 04.06.2014. u 12:37 · pre 151 mesec #3
Jedna mala ispravka.. nisam ni gledao šta sam kucao..

Ne session_destroy() - TO ne moraš da pozivaš gotovo nikada. Samo pusti da se sesija sama, po php.ini direktivi (timeout-u) ubije. Onda kada treba, onako kako je podešeno. Najbolje.

Nije session_destroy() već - session_write_close();

Dakle, sve što sam ispisao - true.

Samo zameni destroy() sa write_close()

Moja brzopleta malenkost, ne zameri.

:)

To je zapravo funkcija koja ti treba.
Potpis
about:networking
Sviđa mi se1
Re: Session destroy i update tabele posle zatvaranja browsera 05.06.2014. u 08:54 · pre 151 mesec #6
Ne znam jel radi, ali mozda mozes probati sa window.unload ili http://api.jquery.com/unload/ . Dakle, taj dogadjaj da pokrene AJAX sa kojim upises u bazu kad je zatvorio stranicu / uradio "refresh". Kad se ponovo ucita stranica upise u bazu da je logovan ili obrise prethodni red. Mozes to voditi na principu nekog dnevnika pa onda za statistiku odgovarajuce SQL upite pokretati...
Re: Session destroy i update tabele posle zatvaranja browsera 06.06.2014. u 00:38 · pre 151 mesec #8
Bojim se da se ovo ne može rešiti bez JS jer je HTTP protokol bez pamćenja stanja (stateless) ! Mislim da rešenju koje je predložio vatri nedostaje samo funkcija keepAlive() u kombinaciji sa vremenski ograničenim sesijama.

Citat:
To bi valjda trebalo da može sa - connection_aborted()
A postoji i connection_status()


Ovo nema veze sa postavljenim pitanjem jer se odnosi na zahtev koji server trenutno obrađuje i korisno je samo u slučaju dugih obrada. U tom slučaju server može da proveri da li je klijent u međuvremenu otkazao zahtev.
Re: Session destroy i update tabele posle zatvaranja browsera 06.06.2014. u 08:25 · pre 151 mesec
izmenjeno 1 put, poslednji put Targarijen 06.06.2014. u 08:36
  1. Targarijen06.06.2014. u 08:36zapis iz teksta poruke
#10
^To je odgovor na pitanje:

Kako da proverim da li je veza sa klijentom čiji se zahtev trenutno obrađuje i dalje aktivna?

Ako sam ja dobro razumeo Rodja_ki želi da postigne nešto sasvim drugo.

@Rodja_ki, možda možeš da razmotriš i korišćenje WebSocketa i uspostavljanje dvosmerne veze sa serverom, mada je to dodatna komplikacija. Pogledaj ovu biblioteku http://socketo.me/
Re: Session destroy i update tabele posle zatvaranja browsera 06.06.2014. u 10:10 · pre 151 mesec #11
Hvala vam na odgovorima, bio sam zauzet drugim problemima, u sustini, sa ajaxom sam pokusao, i nisam uspeo. Pokusacu sa vasim predlozima, proguglacu jos, pa cu probati nesto da uradim (da ne kazem izmajmunisem :) ).
Re: Session destroy i update tabele posle zatvaranja browsera 09.06.2014. u 09:27 · pre 150 meseci #12
Vodiš sam računa o trajanju sesije, nemoj da to za tebe radi web server i onda ćeš da znaš kada je sesija invalidirana jer ćeš ti to da uradiš:
http://www.php.net//manual/en/session.customhandler.php

EDIT:
Mislim da ne moraš da implementuješ svu logiku nanovo, ima ova klasa, samo je extenduj i dodaj svoj dio koji loguje invalidaciju sesije:
http://www.php.net//manual/en/sessionhandler.open.php
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme