Seite 1 von 2

keine doppelten sessions vom gleichen user. aber wie?

Verfasst: 08.08.2004 13:14
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

Verfasst: 08.08.2004 16:03
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

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

Verfasst: 08.08.2004 16:06
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?

Verfasst: 08.08.2004 16:42
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
}

Verfasst: 09.08.2004 19:03
von Lord Potassium
keiner mehr ideen? :-?

Verfasst: 13.08.2004 11:35
von Lord Potassium
*raufschieb*
:-?

Verfasst: 28.08.2004 22:40
von Lord Potassium
vielleicht hab ich ja diesmal mehr glück.
kann mir jemand helfen? :cookie:

Verfasst: 29.08.2004 13:40
von Pyramide
Übergibst du die Session-ID denn auch per URL, wenn das Cookie nicht akzeptiert wird (siehe z.B. append_sid bei phpBB)?

Verfasst: 29.08.2004 13:47
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?

Verfasst: 29.08.2004 14:26
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.