|
|
User gesamt
|
:
|
2443557
|
User online
|
:
|
3
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » Workshops » Autologout
Seite:
|
1
2
3
>
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
23.03.2009 00:14 Uhr
|
Autologout
|
strolch_007
|
Forenuser
|
|
registriert
|
16.03.2009
|
wohnt in
|
|
Beiträge
|
40
|
|
hallo,
habe mich jetzt mit dem workshop eingehend befasst und ich muß sagen. Hervorragend!
Trotzdem komm ich mit einem, nämlich dem Autologout, nicht so ganz klar.
Ich habe das Script bei mir eingebaut und funktioniert soweit auch wunderbar. Allerdings nur wenn ich die if-Anweisung -->Online Status der User aktualisieren weg lasse. Versteh ich das richtig das bei klick auf irgendwas die DB mit dem Feld "letzet_aktion" akualisert wird und dann gleich anschließend geprüft wird (User ohne Autologin ausloggen) ob der User 20 Minuten nicht aktiv war. Entweder hab ich da einen totalen "Wurm" im Kopf oder aber an dem Script stimmt was nicht, weil ein Script das vor ein paar Sekunden (letzte_aktion in DB) aktualisiert wurde, doch niemals die anschließend folgende 20 Minuten Bedingung erfüllen kann. Meine Denkweise ich muß ja irgendwas anklicken um eine Seite mit dem Script autologout zu starten, weil sich ja sonst das php (wenn es einmal durchlaufen wurde) nicht von selbst noch einmal startet.
Wo hab ich da den Denkfehler oder woran liegt das sonst? Ich poste mal vorsichtig mein Script, weils etwas lang ist hoffe ich das sich niemand drüber auffregt hier:-)
PHP:
<?php
error_reporting(E_ALL);
session_start();
// eindeutigen Benutzernamen anhand von Session wählen
$username = $_SESSION['username'];
$MYSQL_HOST = 'xxxxxx';
$MYSQL_USER = 'xxxxxx';
$MYSQL_PASS = 'xxxxxx';
$MYSQL_DATA = 'xxxxxx';
$connid = mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
// ##### automatischer Logout - ANFANG - Einbau in JEDE SEITE !!!!
// 1. Prüfen, ob ein Autologin des Users stattfinden muss
// Dies Prüfung ist für User mit aktiviertem autologin
// wenn sie sich nicht ausgelogt haben wird ihre Session ja
// zerstörrt,
// also wird nach einem gesetzten Cookie gesucht und die
// Session (falls Cookie vorhanden)
// wieder gestartet
if(isset($_COOKIE['autologin']) AND !isset($_SESSION['UserID'])){
$sql = "SELECT
id
FROM
xxxxx
WHERE
autologin = '".mysql_real_escape_string($_COOKIE['autologin'])."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
if(mysql_num_rows($result) == 1)
doLogin($row['id'], '1');
}
// 2. Online Status der User aktualisieren - Prüfung über letzte_aktion
// ob ein User aktiv ist
if(isset($_SESSION['UserID'])){
$sql = "UPDATE
xxxxxx
SET
letzte_aktion = '".time()."'
WHERE
id = '".$_SESSION['UserID']."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
}
// 3. User ohne Autologin ausloggen
// wird nach 20 Minuten automatisch ausgeloggt, aber
// nur wenn autologin nicht
// aktiviert wurde - Im Test sind nur 2 Minuten
// eingestellt!
$sql = "UPDATE
xxxxxxx
SET
session_id = NULL,
autologin = NULL,
ip = NULL
WHERE
'".(time()-60*2)."' > letzte_aktion AND
autologin IS NULL
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
// 4. Kontrollieren, ob ein automatisch ausgeloggter User noch eine
// gültige Session besitzt
// Sessions besitzen eine Lebensdauer von 24 Minuten,
// kann also sein das trotzdem
// noch eine Session besteht. Deswegen erfolgt diese
// Prüfung
if(isset($_SESSION['UserID'])){
$sql = "SELECT
session_id
FROM
xxxxx
WHERE
id = '".$_SESSION['UserID']."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
if(!$row['session_id']){
$_SESSION = array();
session_destroy();
}
}
// ##### automatischer Logout - Ende - Einbau in JEDE SEITE !!!!
?>
Wäre nett wenn mir jemand hier etwas helfen könnte. Evtl. hab ich ja auch nur einen gravierenden Denkfehler, irgendwo.....
Falls ich irgendwie, irgendwas irgendwo falsch gepostet habe oder so. Dann bitte ich um viel SORRY. Bin neu hier:-)
gruessle
strolch_007
Dieser Beitrag wurde am 23.03.2009 um 00:20:59 Uhr von strolch_007 zum 5. Mal editiert.
|
|
|
23.03.2009 10:19 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Hey Strolch,
diese Methode mit dem "Skript bei jedem Seitenaufruf laden" ersetzt quasi CronJobs, also zeitgesteuerte Skripte, da diese nicht von jedem Hoster angeboten werden.
Das Ganze funktioniert nur, wenn du schon ein paar Besucher auf deiner Seite hast, denn stell dir vor, du bist eingeloggt und machst 25 minuten nichts. In dieser Zeit kommt ein anderer User auf deine Seite ==> Das Skript zum ausloggen wird ausgeführt und wird dich, da du ja bereits seit 25 minuten inaktiv bist, ausloggen.
Wenn du der alleinige Benutzer deiner Seite bist dann funzt das leider nicht.. gibt aber dann ohne Cronjobs auch keine andere Möglichkeit, sowas zu realisieren 
Viele Grüße
|
|
|
23.03.2009 22:41 Uhr
|
Autologout
|
strolch_007
|
Forenuser
|
|
registriert
|
16.03.2009
|
wohnt in
|
|
Beiträge
|
40
|
|
Hallo,
danke für die schnelle Antwort! Also kann ich meine "Denke" und Sorgen über Bord werfen. Bin nämlich dann genau in die "Falle" mit nur einem User (zum Testen) getappt. - Und da funktioniert es dann natürlich nicht. Jetzt wo du das so anschaulich schreibst versteh ich das sogar und erscheint mir auch extrem logisch. Hab mir das (fast) gedacht das das als Ersatz für Cronjobs dient. :-) Ist einer der Gründe warum ich mich da so richtig rein gekniet habe um das zu verstehen, weil ich nicht so ein ganz doller Freund von Cronjobs bin (ohne jetzt hier eine Diskussion über Sinn- oder Unsinn von Cronjobs lostreten zu wollen).
Habe mir da aber noch einen Gedanken drüber gemacht. Wenn nun jemand auf meine Seite klickt und ich werde ausgeloggt. Dann steh ich ja weiter auf dieser Seite rum (irgendwo im Innenbereich). Ich mcöhte aber gerne, wenn ich dann als ausgeloggter User zu dem Entschluss komme, z. B. nachdem ich gemütlich meine Bratkartoffeln gegessen habe, wieder online zu gehen. Funktionert das dann ja nicht mehr. Sprich ich muß mich neu einloggen. Ist es nun machbar wenn ich irgendwo auf der Seite was rumklicke dass ich automatisch auf die Loginseite "verwiesen" werde, sprich die Loginseite erscheint bei klick.
Habe das bis jetzt immer mit
PHP:
<?php
.
.
header('Location: http://..und ab zur Loginseite');
.
.
?>
gelöst. Bin mir aber nicht sicher ob das hier sinnvoll ist und überhaupt klappt. Wie gesagt testen ist sehr eingeschränkt, weil ich nur einen User habe.
Gruss
strolch_007
|
|
|
24.03.2009 17:36 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Zitat: Wie gesagt testen ist sehr eingeschränkt, weil ich nur einen User habe.
Benutz 2 Browser. Dann werden nämlich auch 2 Sessions erzeugt und du kannst nen bisschen rumtesten 
Generell solltes so funktionieren, wie du schreibst. Sofern sich der User grad in nem Bereich aufhält, in dem ein Login erfoderlich ist. Kanns dann mittels
PHP:
<?php
if (isset($_SESSION['UserID']))
?>
prüfen, ob derjenige noch eingeloggt ist und dann mit dem header() weiterleiten.
|
|
|
27.03.2009 06:54 Uhr
|
|
strolch_007
|
Forenuser
|
|
registriert
|
16.03.2009
|
wohnt in
|
|
Beiträge
|
40
|
|
hallo,
also das mit dem
PHP:
<?php
if (isset($_SESSION['UserID']))
?>
habe ich so gelöst das ich (isset verlangt ja onlne-user!, ich will ja reagieren wenn er eben nicht mehr online ist = automatische Logout) einfach direkt nach session_destroy den header.... eingegeben habe. Hab ja ganz übersehen das der User ja eindeutig identifiziert wurde. Drum meine Eingangsbedenken. Wer lesen kann ist klar im Vorteil. Hätt mir die Frage fast sparen können:-)
So "fliegt" der User automatisch bei überschreiten der voreingestellten Zeitabfrage auf eine Seite "Aus Sicherheitsgründen wurden Sie automatisch ausgeloggt." Ansonsten funktionier alles einwandfrei. Naja ein User bleibt bei mir IMMER online. Warum das so ist weiß ich nicht. Stört aber jetzt auch nicht so unbedingt. Einer muß ja die Stellung halten:-)
Wollte dann noch was einbauen und dachte des geht ja ganz flott weil ich ähnliches schon gemacht habe. Aber "Pustekuchen":-)
Ich habe die Userliste etwas "mibraucht und daraus eine Onlinstatusanzeige für jeden User gebastelt. Ist ja mehr oder weniger nur die echos aus den Diensten zu entlassen:-)
Auch das geht einwandfrei solange ich "nur" onlie oder eben offline verwende. Möchte ich jetzt aber z.B. mittels
Code:
<form>
<select name="user_status" id="user_status">
<option value="0" selected="selected">online</option>
<option value="beschäftigt" <?php if(isset($_POST['user_status']) AND $_POST['user_status'] == 'beschäftigt') echo ' selected'; ?>>beschäftigt</option>
<option value="bin gleich zurück" <?php if(isset($_POST['user_status']) AND $_POST['user_status'] == 'bin gleich zurück') echo ' selected'; ?>>bin gleich zurück</option>
</select></td>
<input name="ok" type="submit" value="ok" style="height:22px; padding: 0px;" />
</form>
die Abfrage erweitern tun sich gleich mehrere Probleme auf. Wie ist es machbar das z.B. das angecklickte "beschäftigt" über alle Seiten erhalten bleibt und die Schrift sich z.B. in orange ändert. Nur eine Zeile dazu schreiben mit den entsprechenden Änderungen reicht ja hier bei weitem nicht.
Bei "nur" Formular neu laden wäre das ja kein Problem. Wie bringe ich das gesetzte online auch ins select rein und kann aus dem select (sprich mit den da vorgenommenen Änderungen auf den Onlinestatus direkt zugreifen?
Es gibt also mehrere Seiten auf denen man "rumwandern" kann (interner = eingeloggter Bereich, ist ja wohl meisten so ) und auf allen Seiten soll dann das (egal in welcher Seite die Änderung vorgenommen wurde) in select angeklickte (z.B "beschäftigt" angezeigt werden und die Änderung des Status in $olnine ebenfalls auf allen Seiten erhalten bleiben. Seitenaufbau ist bei mir so das ganz oben das PHP steht und dann nach <Doctype....> der XHTMLl Teil kommt.
Die online/ offline Anzeige klappt ja bei mir ausnahmslos gut.
Gruss
strolch_007
Dieser Beitrag wurde am 27.03.2009 um 07:11:13 Uhr von strolch_007 zum 4. Mal editiert.
|
|
|
Seite:
|
1
2
3
>
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|