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'];
		
	}
	
}
?>
Ok, aangezien niemand hier de oplossing weet, en ik uiteindelijk toch een oplossing heb gevonden, wil ik die graag met jullie delen. Hopelijk heeft iemand hier wat aan!

Om dit te realiseren doe je als volgt:

- maak een tabel met sessies en daarin een veld met random code en een verwijzing naar de usertable
- als iemand is ingelogd maak je een nieuwe sessie met (unieke!) code en die sla je op in een cookie die op t hele domein bereikbaar is (.domeinnaam.nl)
- tijdens het laden van de pagina check je of er een cookie is met de code, probeer die code te matchen en je weet of iemand ingelogd is, en zoja..als wie.
- als iemand uitlogt verwijder je de code uit de database en ben je klaar

Reageren