Zum Inhalt springen

session_id() nach X Stunden neu vergeben


Empfohlene Beiträge

Hallo,

ich möchte den benutzern meiner website nach einer bestimmten zeit (sagen wir mal 2 stunden) eine neue session_id() geben, allerdings nur wenn sie 2 stunden inacktiv waren... das ganze ist an einem counter für webstats gekoppelt um zu sehen auf welche seiten der benutzer wie lange zeit verbringt usw...

mein bisherriger lösungsweg sieht etwa so aus:


function counter(){
$user_ip = $_SERVER['REMOTE_ADDR'];
$sid = session_id();
odb(); //verbindung zur mysql datenbank
$qry = 'SELECT
*
FROM
counter
WHERE
ip="'.$user_ip.'"
AND
sid="'.$sid.'"
LIMIT
1';
$res = mysql_query($qry)or die(mysql_error());
$check_user = mysql_num_rows($res);
$data = mysql_fetch_array($res);
cdb(); //verbindung zur mysql datenbank trennen
if ($check_user == 0){
counter_create($data);
}
if ($check_user == 1){
counter_update($data);
}
}
[/PHP]

die function counter_create() funktioniert soweit einwandfrei und trägt unteranderem ein:

-eine ID für den benutzer

-session_id()

-acktueller timestamp

-timestamp + 60*60*2 (timestamp 2 stunden in der zuckunft)

und einige für hier belanglose dinge

bei der funktion counter_update() hab ich allerdings ein kleines problem in den ersten zeilen:

[PHP]
function counter_update($data) {
$ts = time();
if($data['timestamp_kill'] < $ts){
$sid = session_id();
echo $sid;
session_regenerate_id(true);
$sid = session_id();
echo " " .$sid;
echo " kill";
}
.
.
.
.
.
.

also in die schleife geht er rein, ich hab natürlich den timestamp nur auf 10 sekunden begrenzt um das zu kontrolieren, aber wie man sieht weis ich hier einfach nicht weiter... ich möchte halt nach 2 stunden inaktivität eine neue session_id() vergeben, nur funktioniert das weder mit:

session_destroy();

session_regenerate_id(true);

bei der 2. version schmeisst er mir zusätzlich noch diese fehlermeldung an den kopf:

Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in D:\xampp\htdocs\ws\func\counter.php on line 74

währe um nen codesnippet nicht böse oder anregungen wie ich das problem lösen könnte!

die session_id() übergebe ich überrigens nicht in der adresszeile, und möchte ich möglichst auch nicht!

danke schonmal im vorraus!

Bearbeitet von Syli
Link zu diesem Kommentar
Auf anderen Seiten teilen

also ich hab das bischen umstruckturiert, vorher hatte ich den counter im feeder, also als letztes sozusagen jetzt sieht das so aus:

index.php:


<?php
require('func/db.php');
require('func/counter.php');
session_start();
counter();
.
.
.
.
[/PHP]

und in der counter.php(70-76):

[PHP]
function counter_update($data) {
$ts = time();
if($data['timestamp_kill'] < $ts){
echo session_id();
session_regenerate_id();
echo " " . session_id();
}

wird nach counter(); ausgeführt, welcher prüft ob der benutzer schon in der DB drin steht oder nochnicht (anhand von session_id() und IP) siehe ersten post....

trotzdem selber fehler:

4fd9898cffd01d6f50c1d47d208df6b2

Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in D:\xampp\htdocs\ws\func\counter.php on line 74

4fd9898cffd01d6f50c1d47d208df6b2

also hab ich momentan eher das problem das ich vor der funktion counter() abfragen muss ob die session_id(); für meine webseite zu alt ist ohne session_id(); benutzen zu dürfen???

Link zu diesem Kommentar
Auf anderen Seiten teilen


[...]
echo session_id();
session_regenerate_id();
echo " " . session_id();
[...]
[/PHP]

[...]

trotzdem selber fehler

[...]

schaue dir deine fehlermeldung mal genau an.

das liegt daran, du darfst den webseiteinhalt nicht vorher darstellen bevor du die funktion aufrufst..

google mal nach "headers already sent"

Du machst halt in Zeile 74 in der counter.php irgendwelche Ausgaben. Das darf nicht sein. Das Sessiongedöns macht man am besten als aller erstes auf der Seite und danach kommt erst der normale Rest.

Wer lesen kann ist klar im Vorteil.

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen


74: session_regenerate_id();
[/PHP]

mein ansatz dabei war halt die bisherige session_id() durch eine neue zu ersetzen, was laut php.net referenz genau dessen aufgabe ist

das problem bei der ganzen sache ist das ich das mit der datenbank abgleiche und wenn ich das richtig verstanden habe MUSS session_regenerate_id(); direct nach session_start(); kommen, was bei mir wiederrum das problem darstellt das ich somit nicht vorher abgleichen kann ob die zeit überschritten ist in der datenbank oder noch okay ist, oder sollte ich eine globale variabel nutzen statt den maximalen timestamp (zum vergeben der neuen session_id();) mit der mysql datenbank abzugleichen????

Link zu diesem Kommentar
Auf anderen Seiten teilen

okay, danke ich habe es verstanden

ich nehme das "echo" einfach raus.... aus der 73. zeile, dann klappt es, bzw ich teste es gerade... tut mir leid wegen meinem einen blinden auge

PS: ich habe jetzt meine abfrage (ob die session_id() wirklich geändert wird) nun folgendermassen abgeändert....


function counter_update($data) {
$ts = time();
if($data['timestamp_kill'] < $ts){
$oldsid = session_id();
session_regenerate_id(true);
echo $oldsid." " . session_id();
}
[/PHP]

Bearbeitet von Syli
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...