keine doppelten sessions vom gleichen user. aber wie?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Lord Potassium
Mitglied
Beiträge: 91
Registriert: 09.02.2004 11:15
Wohnort: Wien

keine doppelten sessions vom gleichen user. aber wie?

Beitrag von Lord Potassium »

servus
wenn man auf meiner seite keine cookies akzeptiert wird mit jedem aufruf eine neue session_id erzeugt. da ich aber die derzeitigen user auf der seite mittels session_id und ip überprüfe und in eine tabelle schreibe, steigt die besucheranzahl pro klick um 1. da das natürlich nicht der realtität entspricht, möchte ich das verhindern.

mir ist bei phpbb aufgefallen, dass selbst wenn man keien cookies benutzt, die anzahl der besucher stehts richtig ist.

was ist der trick dabei bzw wie kann ich mein prob lösen?

btw: meine seite: www.kalium.org
Dosis venenum facit
Phillipus Aureolus Theophrastus Bombastus von Hohenheim
http://www.debattierclub.at |http://www.kalium.org
Dennis63
Ehemaliges Teammitglied
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 »

Also Du mußt die Session-ID dann per URL übergeben. Dann ist sie auf der nächsten Seite gleich.
Ausserdem mußt Du für AOL User den IP-Check verringern auf die ersten 2 Blöcke, da AOL User mit jedem Klick ne andere IP haben.

Grüße
Dennis
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Re: keine doppelten sessions vom gleichen user. aber wie?

Beitrag von Blutgerinsel »

Lord Potassium hat geschrieben:servus
wenn man auf meiner seite keine cookies akzeptiert wird mit jedem aufruf eine neue session_id erzeugt.
Das ist schon der erste Punkt was nie sein kann.
ich initialisiere mit session_start() eine Session im Header am besten.
Und wiederhole dies in jedem Script wo ich auf die Session zugreifen möchte. Wer keine Session hat bekommt eine durch session_start und wenn es schon eine gibt macht dies session_start verfügbar und ich kann darauf zugreifen.
da ich aber die derzeitigen user auf der seite mittels session_id und ip überprüfe und in eine tabelle schreibe, steigt die besucheranzahl pro klick um 1. da das natürlich nicht der realtität entspricht, möchte ich das verhindern.


reichen diese Daten von der Logik?

Ich würde mich fragen wann wird eine Session ungültig?
Was passiert wenn ich mich einlogge?

Momentan fügst du lediglich immer neue Datensätze ein das ich dann u.A. mehrmals auftauche ist klar.

Warum trägst du keine Session Zeit ein und setzt diese auf Null z.B. wenn man sich ausloggt oder aber nach einer bestimmten Zeit?

PHPBB setzt eine Heap Table ein sprich eine temporäre Tabelle und da würde ich mir doch mal die Attribute anschauen.

Ach ja wie sehr gewichtest du die IP? Wenn ich 20 User über einen Proxy kommen hat das auswirkungen bei dir?
Benutzeravatar
Lord Potassium
Mitglied
Beiträge: 91
Registriert: 09.02.2004 11:15
Wohnort: Wien

Beitrag von Lord Potassium »

ok. ups also ich hab mich schlecht ausgedrückt bzw einige sachen vergessen:
aslso meine session tabelle sie folgender maßen aus:

ID bigint(4) NOT NULL auto_increment,
Session_ID varchar(32) NOT NULL default '0',
Session_UID tinyint(4) NOT NULL default '0',
Session_Login int(11) NOT NULL default '0',
Session_Time int(11) NOT NULL default '0',
Session_IP varchar(8) NOT NULL default '',
Session_Location varchar(30) NOT NULL default '',
Session_Location_Link varchar(255) binary NOT NULL default '',

gelöscht wird wenn die session länger als 5 min nicht upgedatet worden ist. (zeit kann ich variabel einstellen)

Code: Alles auswählen

if(isset($_COOKIE['Kalium_Check']) and $_COOKIE['Kalium_Check'] == "true"){
	$query = mysql_query("SELECT * FROM kalium_sessions WHERE Session_ID = '".session_id()."' and Session_IP = '".encode_ip($IP)."' LIMIT 1");
	checkquery($query);
	$row = mysql_fetch_array($query);
	if($_SESSION['UID'] == ''){
		$user = 0;
	}
	else{
		$user = $_SESSION['UID'];
	}
	if($row['ID'] != ''){
		$query = mysql_query("UPDATE kalium_sessions SET Session_UID = '".$_SESSION['UID']."', Session_Time = '".time()."',
		 Session_Location = '".Position."', Session_Location_Link = '".Position_Link."'
		WHERE Session_ID = '".session_id()."' AND Session_IP = '".encode_ip($IP)."'");
		checkquery($query);
	}
	else{
		$query = mysql_query("INSERT INTO kalium_sessions (Session_ID,Session_UID,Session_IP, Session_Login, Session_Time, Session_Location, Session_Location_Link) 
		VALUES ('".session_id()."','".$user."','".encode_ip($IP)."','".time()."','".time()."','".Position."','".Position_Link."') ");
		checkquery($query);
	}
}

//cleanup
$query = mysql_query("SELECT * FROM kalium_sessions");
$row = mysql_fetch_array($query);
while($row){
	if($row['Session_Time'] < (time() - $config['session_del_frq'])){
		$query_del = mysql_query("DELETE FROM kalium_sessions WHERE ID = '".$row['ID']."' LIMIT 1");
		#echo "deleted";
	}
	$row = mysql_fetch_array($query);
}
(teil der datei common.php)

das cookie setze ich in einer datei (vars.php)ein, die vor der datei includet wird um zu sehen ob der user cookies akzeptiert, da eben sonst oben genanntes prob auftritt.
da die cookies aber erst gesetz werden, wenn das script fertig geparst ist, ist das zu spät.

ich include bei mir in jeder seite zuerst
config.php
vars.php
session.php
functions.php
common.php

die session_cookies werden in der session.php erzeugt die folgenden code hat:

Code: Alles auswählen

if(!defined("InKalium")){
	die("Hacking attempt");
}
else{
	session_start();
	session_register('LoggedIn');
	session_register('UID');
	session_register('Priv');
	session_register('Pw');
	session_register('Active');
	session_register('AutoLogin');
	session_register('NotDisabled');
	session_register('Edit'); //um das menü zu bearbeiten
}
Dosis venenum facit
Phillipus Aureolus Theophrastus Bombastus von Hohenheim
http://www.debattierclub.at |http://www.kalium.org
Benutzeravatar
Lord Potassium
Mitglied
Beiträge: 91
Registriert: 09.02.2004 11:15
Wohnort: Wien

Beitrag von Lord Potassium »

keiner mehr ideen? :-?
Dosis venenum facit
Phillipus Aureolus Theophrastus Bombastus von Hohenheim
http://www.debattierclub.at |http://www.kalium.org
Benutzeravatar
Lord Potassium
Mitglied
Beiträge: 91
Registriert: 09.02.2004 11:15
Wohnort: Wien

Beitrag von Lord Potassium »

*raufschieb*
:-?
Dosis venenum facit
Phillipus Aureolus Theophrastus Bombastus von Hohenheim
http://www.debattierclub.at |http://www.kalium.org
Benutzeravatar
Lord Potassium
Mitglied
Beiträge: 91
Registriert: 09.02.2004 11:15
Wohnort: Wien

Beitrag von Lord Potassium »

vielleicht hab ich ja diesmal mehr glück.
kann mir jemand helfen? :cookie:
Dosis venenum facit
Phillipus Aureolus Theophrastus Bombastus von Hohenheim
http://www.debattierclub.at |http://www.kalium.org
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Übergibst du die Session-ID denn auch per URL, wenn das Cookie nicht akzeptiert wird (siehe z.B. append_sid bei phpBB)?
Benutzeravatar
Lord Potassium
Mitglied
Beiträge: 91
Registriert: 09.02.2004 11:15
Wohnort: Wien

Beitrag von Lord Potassium »

Pyramide hat geschrieben:Übergibst du die Session-ID denn auch per URL, wenn das Cookie nicht akzeptiert wird (siehe z.B. append_sid bei phpBB)?
nein weil ich die session id ned immer dran haben will.
geht das auch, dass die sessionid nur an die url angehöngt wird wenn keine cookies angenommne werden?
Dosis venenum facit
Phillipus Aureolus Theophrastus Bombastus von Hohenheim
http://www.debattierclub.at |http://www.kalium.org
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Lord Potassium hat geschrieben:nein weil ich die session id ned immer dran haben will.
Na dann ists ja kein Wunder. Wenn die Session-ID weder per Cookie noch per URL kommt, woher willst du dann wissen, daß es für den Benutzer schon eine gibt?
Lord Potassium hat geschrieben:geht das auch, dass die sessionid nur an die url angehöngt wird wenn keine cookies angenommne werden?
Ja, prüfe einfach, ob das Session-ID Cookie gesetzt ist und wenn nicht häng sie an die URL an.
Antworten

Zurück zu „Coding & Technik“