Beste mensen, ik heb even een vraag. Ik ben bezig met een website en gebruik daar dynamische subdomeinen (via htaccess en wildcards). Het gaat hier om een profielen-achtige site. Als ik inlog op het ene subdomein (subdomeinnaam = profielnaam zoals hyves) en vervolgens naar een ander subdomein (profiel) ga, dan blijf ik netjes ingelogd. Echter als ik op deze pagina vervolgens uitlog en inlog met andere logingegevens, logt ie me op de juiste manier in, maar wanneer ik dan terugga naar het vorige subdomein, ben ik weer als de vorige user ingelogd. Ga ik weer terug, is het weer andersom. Hoe kan ik zorgen dat bij het uitloggen alle cookies, en dus ook die van de andere subdomeinen, ongeldig worden?

Stukje code loginscript:

<?php
session_start();

ini_set("session.cookie_domain", ".domeinnaam.nl");

include '../../includes/connection.php';
include '../../includes/functions.php';

if (isset($_POST)) {
	
	$profielnaam = mysql_prep($_POST['profielnaam']);
	$wachtwoord = mysql_prep($_POST['wachtwoord']);
	$enc_wachtwoord = sha1($wachtwoord);
	
	if ($profielnaam != 'admin') {
	
		if (!stristr($profielnaam, '@')) { // @ check
		
			$query = "SELECT id FROM profielen WHERE profielnaam = '{$profielnaam}' AND wachtwoord = '{$enc_wachtwoord}' AND actief = 1 LIMIT 1";
			$result_set = mysql_query($query);
			
			if (mysql_num_rows($result_set)) {
			
				$result = mysql_fetch_assoc($result_set);
				
				$_SESSION['profielnaam'] = $profielnaam;
				$_SESSION['wachtwoord'] = $enc_wachtwoord;
				$_SESSION['user_id'] = $result['id'];
				
				setcookie("Login[profielnaam]", $profielnaam, time()+31536000, "/",".domeinnaam.nl");
				setcookie("Login[wachtwoord]", $enc_wachtwoord, time()+31536000, "/",".domeinnaam.nl");
				setcookie("Login[user_id]", $result['id'], time()+31536000, "/",".domeinnaam.nl");
				
				$query = "UPDATE profielen SET laatst_aangemeld = NOW() WHERE id = ".$result['id'];
				mysql_query($query);
				
				$query = "DELETE FROM module_guests_online WHERE ip = '".$_SERVER['HTTP_REFERER']."'";
				mysql_query($query);
				
			
			} else {
			
				header('Location: ../../info.php?p=fout_login');
				exit;
				
			}
		
			if (isset($_GET['redirect'])) {
				
				header('Location: '.$_SERVER['HTTP_REFERER']);
				
			} else {
				
				header('Location: http://'.$profielnaam.'. domeinnaam.nl/');
				
			}
			
		
		} else { // @ check
			
			$query = "SELECT id FROM profielen WHERE profielnaam = '{$profielnaam}' AND wachtwoord = '{$enc_wachtwoord}' AND actief = 1 LIMIT 1";
			$result_set = mysql_query($query);
			
			if (mysql_num_rows($result_set)) {
			
				$result = mysql_fetch_assoc($result_set);
				
				$_SESSION['profielnaam'] = $profielnaam;
				$_SESSION['wachtwoord'] = $enc_wachtwoord;
				$_SESSION['user_id'] = $result['id'];
				
				setcookie("Login[profielnaam]", $profielnaam, time()+31536000, "/",".domeinnaam.nl");
				setcookie("Login[wachtwoord]", $enc_wachtwoord, time()+31536000, "/",".domeinnaam.nl");
				setcookie("Login[user_id]", $result['id'], time()+31536000, "/",".domeinnaam.nl");
				
				$query = "UPDATE profielen SET laatst_aangemeld = NOW() WHERE id = ".$result['id'];
				mysql_query($query);
				
				header('Location: http://'.$profielnaam.'. domeinnaam.nl/');
				
			} else {
			
				header('Location: ../../info.php?p=fout_login');
				exit;
				
			}
			
		}
		
	} else {
	
		if ($enc_wachtwoord == sha1('fotosh!!t_123')) {

			$_SESSION['profielnaam'] = $profielnaam;
			$_SESSION['wachtwoord'] = $enc_wachtwoord;
			$_SESSION['user_id'] = 'admin';
				
			setcookie("Login[profielnaam]", $profielnaam, time()+31536000, "/",".domeinnaam.nl");
			setcookie("Login[wachtwoord]", $enc_wachtwoord, time()+31536000, "/",".domeinnaam.nl");
			setcookie("Login[user_id]", 'admin', time()+31536000, "/",".domeinnaam.nl");

			header('Location: ../../stats.php');
			
		} else {
			
			header('Location: ../../info.php?p=fout_login');
			exit;
				
		}
		
		
	
	}

}
?>


Stukje code logoff script:

<?php
	session_start();
	
	ini_set("session.cookie_domain", ".domeinnaam.nl");

	$_SESSION = array();

	session_destroy();
	
	//setcookie("Login", '', time()-3600);
	setcookie("Login[profielnaam]", '', time()-3600, "/",".domeinnaam.nl");
	setcookie("Login[wachtwoord]", '', time()-3600, "/",".domeinnaam.nl");
	setcookie("Login[user_id]", '', time()-3600, "/",".domeinnaam.nl");
		
	header("Location: ".$_SERVER['HTTP_REFERER']);
?>


Stukje Cookie login welke op iedere pagina terugkomt:

<?php
if (isset($_COOKIE['Login']) && !isset($_SESSION['user_id'])) {
	
	if ($_COOKIE['Login']['profielnaam'] != 'admin') {
	
		$query = "SELECT id FROM profielen WHERE actief = 1 AND id = ".$_COOKIE['Login']['user_id'];
		$result = mysql_query($query);
		
		if (mysql_num_rows($result)) {
		
			$_SESSION['user_id'] = $_COOKIE['Login']['user_id'];
			$_SESSION['wachtwoord'] = $_COOKIE['Login']['wachtwoord'];
			$_SESSION['profielnaam'] = $_COOKIE['Login']['profielnaam'];
			
			$query = "UPDATE profielen SET laatst_aangemeld = NOW() WHERE id = ".$_SESSION['user_id'];
			mysql_query($query);
			
			$query = "DELETE FROM module_guests_online WHERE ip = '".$_SERVER['REMOTE_ADDR']."'";
			mysql_query($query);
		
		}
	
	} else {
	
		$_SESSION['user_id'] = $_COOKIE['Login']['user_id'];
		$_SESSION['wachtwoord'] = $_COOKIE['Login']['wachtwoord'];
		$_SESSION['profielnaam'] = $_COOKIE['Login']['profielnaam'];
		
	}
	
}
?>
Ik denk persoonlijk dat het met de cookies te maken heeft, want als ik uitlog, ben ik wel uigelogd op dat ene domein, maar zodra ik een eerder bekeken subdomein bezoek ben ik weer ingelogd. Heb het idee dat ie voor ieder subdomein een cookie aanmaakt..
bij het inloggen geef je aan setcookie dit als domein mee: ". domein.nl"

Vanwaar die spatie? Ik denk dat dit de reden is dat hij het niet neemt en daardoor vastbijt op die ene subdomein..
Even ene kristische vraag:

Waarom sla je het pasword op in een cookie en in een sessie? Lijkt me echt nergens voor nodig.
Over de hele site gebruik ik session variabelen voor m'n loginchecks. De cookies gebruik ik alleen om de user in te loggen wanneer deze op de site komt.

btw, de spatie komt doordat ik mijn domeinnaam ff heb gereplaced alvorens het hier te posten. In het script dat ik gebruik komen die spaties niet voor. (foutje dus tijdens posten hier) - Scherp
Dan heb je een wachtwoord echt niet in je cookies/sessies nodig hoor.
Of je doet iets extreems fout ;)
OK, ga ik daar ff naar kijken, maar dan is mijn eigenlijke probleem nog niet mee opgelost. ;)
Ok, ik ben na wat debuggen tot de ontsdekking gekomen dat het niet aan de cookies ligt, maar aan de sessies. De cookie wordt netjes ongeldig gemaakt voor alle subdomeinen, maar de sessie blijven wel per subdomein bestaan. Gekgenoeg zou na $_SESSION = array(); alles weg moeten zijn, maar dat geldt alleen voor het subdomein waar ik op dat moment ben. Iemand enig idee hoe ik kan zorgen dat de sessions op overige subdomeinen ook afgesloten/onbruikbaar kunnen worden gemaakt?

Reageren