ugrás a tartalomhoz

Automatikus kijelentkeztetés

kriszrap · 2011. Jún. 15. (Sze), 23.52
sziasztok azt szeretném megcsinálni hogy pl a felhasználó operába bezárj a fület akkor kijelentkeztesse a felhasználót meg a ellép a honlapról vagy bezárja a böngészőt. :)
hát találtam egy scriptet de nem vok benne biztos hogy erre jó lesz ha nem milyen megoldást tudtok ajánlani??:)

script kódja:

page.html

<html>
<head>
<title></title>
<meta name="author" content="DO">
<!-- put this function + the onUnload body attribute into every file -->
<script language="JavaScript">
<!--
function logout()
{
         F1 = window.open("logout.html", "Logout","width=120,height=50,left=10,top=10");
}

//-->
</script>
<noscript></noscript>
</head>
<body onUnload="logout();" text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">

</body>
</html>

logout.html

<html>
<head>
<title></title>
<meta name="author" content="DO">
<noscript></noscript>
</head>
<body onLoad="setTimeout('window.close()', 1000);" text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<p style="font: bold 10pt Verdana; color: navy;">
You have been logged out automatically
</p>
</body>
</html>
épp itt ebbe a kódba ablakot nyit ha kijelentkeztetés kor de ezt most nézzétek el köszi:)
 
1

Session timeout

Poetro · 2011. Jún. 16. (Cs), 00.23
A munkamenet kezelő süti timeoutját 0-ra kell tenni, és akkor amikor ellép az oldalról, akkor le fog járni a süti, ezáltal ki lesz jelentkezve.
2

Azt az onunload bohóckodást

kuka · 2011. Jún. 16. (Cs), 09.20
Azt az onunload bohóckodást felejtsd el.
  • Tapasztalatom szerint arra nem lehet számítani, hogy az onunload eseménykezelőben eszközölt kérés eljut-e a szerverre vagy sem.
  • Az onunload akkor is lefut, ha a látogató más okból hagyja el a lapot, például hivatkozásra kattint vagy űrlapot küld el.
  • Ha a látogató egyszerre több ablakban/fülön böngészi az oldaladat és az egyiket lezárja, a többiben is ki lesz léptetve.
Mindezekkel nem lesz gondod ha Poetro javaslata alapján oldod meg.
3

ÁÁ ti istenek

kriszrap · 2011. Jún. 16. (Cs), 09.40
ÁÁ ti istenek vagytok(mindenre tudjátok a választ respekt :) ) :)

Annyi az egész pl csinálok egy belepet sessiont és az idejét 0 lára állítom.
eddig rendben de honnan tudja a süti hogy elléptem onnan??:)
4

Böngésző

Poetro · 2011. Jún. 16. (Cs), 10.08
A böngésző fogja tudni.
5

honnan tudja a süti hogy

kuka · 2011. Jún. 16. (Cs), 10.13
honnan tudja a süti hogy elléptem onnan?
Nem tudja. A 0 azt jelenti, hogy a böngésző lezárásáig. Olyant, hogy ellép az oldalról és kilépteti a rendszer nem szoktak csinálni, mert kényelmetlen. Például ha a Weblabor minden alkalommal kiléptetne csak mert követem valamelyik idegen oldalra mutató hivatkozását, már rég nem volnék tag.

Annyi szigorítást tehetsz még bele, hogy két sütit használsz:
  • a munkamenet saját sütije 0 időkorláttal
  • egy saját süti aminek minden kérés alkalmával újra beállítod az érvényességét mondjuk most+30 percre
Amennyiben a látogató lezárja a böngészőt, a munkamenet sütije megsemmisül és kiléptetődik. Amennyiben 30 percig nem kért új lapot az oldaladról majd ismét kér, a saját süti hiánya miatt kézzel kilépteted.
6

Valószínűleg én vagyok a

Totti 1986 · 2011. Jún. 16. (Cs), 11.07
Valószínűleg én vagyok a buta, de mi szükség van kiléptetésre?
A session egy rövid idő után automatikusan megszűnik, ezzel nem kell vacakolni. Én épp az ellenkezőjével dolgoztam, h hogy tegyem lehetővé, h amikor még az oldalon van, ne járjon le a session-je. Ellenkező példával még nem találkoztam.
7

Valószínűleg én vagyok a

kuka · 2011. Jún. 16. (Cs), 11.26
Valószínűleg én vagyok a buta, de mi szükség van kiléptetésre?
Valószínűleg a kezdők tipikus paranoia megnyilvánulásaihoz tartozik és közeli rokonságban áll a gyakori „ne tudják megnézni a HTML kódot” és „ne tudják lementeni a képeket” kérésekkel.
8

és a pl az operánál bezárják

kriszrap · 2011. Jún. 16. (Cs), 21.06
és a pl az operánál bezárják a fület és úgy is ki tudjam léptetni??:)
9

Mindegy. Opera is és más

kuka · 2011. Jún. 17. (P), 09.51
Mindegy. Opera is és más böngésző is ugyanúgy jár el fül és ablak záráskor is: sehogy.

Mint írtam,
A 0 azt jelenti, hogy a böngésző lezárásáig.
Más események nem járulnak hozzá a süti megsemmisüléséhez.

Amennyiben mégis az értelmetlen bohóckodást választod, nézz rá a localStorage-ra. Annak az értéke nem látszik ki az aktuális fülből/ablakból, tehát annak lezárásával megsemmisül. (Bár ez nincs kikötve.) Természetesen régebbi böngészők nem ismerték. (Lásd a jelenlegi támogatottságot.) Viszont ha ismerik is, a használatához a látogató hozzájárulása is kellhet. (Amit nálam nem kapnak meg.)
10

így meg csinálom jó

kriszrap · 2011. Jún. 17. (P), 12.32
így meg csinálom jó lesz?:


setcookie("kilepes_ellenorzo", "", time()+0);

ez pedig egy olyan fálj ami minden honlapomba be van szúrva:):

if($_COOKIE["kilepes_ellenorzo"]=="")
  {
  include "logout.php";
  }
Gyors meg írtam Még nem tom tesztelni majd ha a haza értem :)
De legyetek szívesek meg írni hogy így jó lesz-e:) köszönöm:)
11

Nem valószínű, hogy sok jó

kuka · 2011. Jún. 17. (P), 13.19
Nem valószínű, hogy sok jó kisülhet belőle. time()+0 azt jelenti, hogy most+0 másodperc, azaz most. Tehát az a süti a létrehozás pillanatában már érvényét is veszti, tehát a böngésző azonnal törli is. Ami meg a süti értékét illeti, azzal az üres értékkel csak magadat zavarod össze.

Ha ez az én javaslatomnak, mármint
  • a munkamenet saját sütije 0 időkorláttal
  • egy saját süti aminek minden kérés alkalmával újra beállítod az érvényességét mondjuk most+30 percre
megvalósítása akart lenni, akkor inkább:

<?php
// login.php vagy ami a beléptetést végzi

session_set_cookie_params(0); // bár ez valószínűleg fölösleges, mert ez az alapértelmezett
session_start();

if (jelszoellenorzesrendben()) {
  $_SESSION['felhasznalo'] = $azonosito;
} else {
  die('Sikertelen belépés');
}

setcookie("ellenorzo", "bentvan", time()+30*60);

<?php
// minden lap ahol belépés szükséges

session_set_cookie_params(0); // bár ez valószínűleg fölösleges, mert ez az alapértelmezett
session_start();

if ($_COOKIE["ellenorzo"] != "bentvan") {
  unset($_SESSION['felhasznalo']);
}

if (! isset($_SESSION['felhasznalo'])) {
  die('Belépés szükséges');
}

setcookie("ellenorzo", "bentvan", time()+30*60);
12

igen ez a 30 perces

kriszrap · 2011. Jún. 17. (P), 13.53
igen ez a 30 perces kiléptető:) és ha bezárja a böngészőt akkor ugyan ezzel az elvel lépteseem ki ??:)
13

kilépteti

Poetro · 2011. Jún. 17. (P), 13.54
Ha bezárja a böngészőt, akkor mivel a session cookie lejár, egyébként is ki lesz léptetve.
14

ez nekem nem világos

kriszrap · 2011. Jún. 17. (P), 14.14
ez nekem nem világos :
session_set_cookie_params(0);

mire jó??
15

Véletlenül sem szoktál

kuka · 2011. Jún. 17. (P), 14.30
Véletlenül sem szoktál belenézni a dokumentációba?

De akkor is ha nem, igazán felismerhetted volna a korábban tárgyaltak alapján:
  • Poetro:
    A munkamenet kezelő süti timeoutját 0-ra kell tenni

  • kuka:
    a munkamenet saját sütije 0 időkorláttal

16

jaj de figyelmetlen vagyok:(

kriszrap · 2011. Jún. 18. (Szo), 08.13
jaj de figyelmetlen vagyok:(
szerk.:
hát amikor böngésző bezárás van akkor a logout.php-n keresztül szeretném hogy végbe mennyen a kiléptetés mert azt akarom hogy az adatbázisból kitörölje a felhasználót.(tagok ellenörzö. Hogy hányan vannak bejelentkezve :) )
sztem nem megoldható:(
17

Most komolyan azért akarsz

Totti 1986 · 2011. Jún. 18. (Szo), 11.53
Most komolyan azért akarsz kiléptetőt, hogy láthasd, ki van belépve?
Én úgy csinálnám, h mindenkinél, aki be van lépve folyamatosan mondjuk 1 percenként futtatnék egy ajax kérést, hogy update-elje az utoljára aktív időpontot a mostani időpontra. A következő sorban csinálnék egy vizsgálatot, és akinél ez az érték 1 percnél régebbi, az közben kilépett. Ennyi sztem.
18

Töröld később

Poetro · 2011. Jún. 18. (Szo), 11.55
Az adatbázisban tartsd figyelemmel, hogy mikor volt utoljára aktív (például minden egyes oldalletöltése esetén frissítesz egy időbélyeget). És utána mikor legközelebb be akar jelentkezni, akkor megvizsgálod, mikor volt utoljára frissítve az időbélyeg. Ha túl régen, akkor megcsinálod azt a törlést, amit akarsz. Vagy ha más időpontban akarsz ellenőrizni, akkor mondjuk más felhasználók cselekvéseihez kötsz egy olyan ellenőrzést, hogy megnézi kinek az időbélyege elég régi, és azok végrehajt valami műveletet.
19

hát úgy van 5 percnél

kriszrap · 2011. Jún. 18. (Szo), 13.42
hát úgy van 5 percnél régebbieket töröl az adatbázis. Na de én pontosabb infot akarok tudni hogy hányan vannak fent ezért kijelentkezés kor törli az adatbázisból a felhasználót. A többit már tudjátok.

itt a logout.php:
<?php
session_start();
include "config.php";
$id= "".$_SESSION['id'];
$query = mysql_query("DELETE FROM online WHERE ember_id='$id'");

unset($_SESSION['belepett']);
unset($_SESSION['id']);
unset($_SESSION['nick']);
unset($_SESSION['email']);
unset($_SESSION['honlapcim']);
header("location: Nem_vagy_Bejelentkezve.php");
?>
ez pedig a felhasználó törlö(online.php):

$sql = "DELETE FROM online WHERE( (INTERVAL 5 MINUTE + datum) < '".date("Y-m-d H:i:s")."')";
így néz ki
és ha bezárj a a böngészőt akkor logout.php script végbe mennyen.
ja és ugye 5 percre van állitva a törlés a cookival legyen egy időbe??:)
20

Nem lesz pontosabb

Poetro · 2011. Jún. 18. (Szo), 14.26
  • Nem mindenki használ JavaScript-et (biztonsági okokból letiltja), ezáltal a logout sose fog lefutni.
  • IE-ben bármilyen JavaScript hiba megakadályozza, hogy további bármilyen JavaScript kód lefusson, ergo ha van valami gáz, akkor sose szerzel tudomást arról, hogy bezárta a böngészőt.
  • Mindenfajta onunload, onbeforeunload stb. esemény megbízhatatlan, és nem működik konzisztensen még azonos böngészőcsaládon belül sem.
  • Ha lefagy az illető böngészője, akkor sem fog eljutni az esemény a szerverhez.

Meg kell barátkozz a dologgal, hogy pontos mérést nem lehet végezni (még a Google se tud az Analytics-ben).