Niet-werkende Sessie

  • Onderwerp starter Onderwerp starter SvU
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

SvU

Terugkerende gebruiker
Lid geworden
26 jan 2007
Berichten
1.534
Ik heb een applicatie geschreven waarbij ik gebruik maak van sessies, op m'n eigen EasyPHP-server (PHP5) draaide het perfect, maar nu ik het online heb gezet werkt het niet meer.

De provider is Hosting2Go, al denk ik niet dat het daar iets mee te maken heeft. Anyway, het volgende werkt niet:

PHP:
session_start();

$_SESSION["id_user"] = $rows['ID_USER'];
$_SESSION["id_usergroup"] = $rows['ID_USERGROUP'];
$_SESSION["ingelogd"] = 1;

Ik heb het ook met session_register geprobeerd, maar het wil allemaal niet lukken. Ik heb geen idee waar het fout gaat, zeker niet omdat het eerst gewoon prima draaide.

Oja, iets uitgebreider:

PHP:
session_start();

				if (mysql_num_rows($resultaat) > 0) {	
					$rows = mysql_fetch_assoc($resultaat);
				
				$_SESSION["id_user"] = $rows['ID_USER'];
				$_SESSION["id_usergroup"] = $rows['ID_USERGROUP'];
				$_SESSION["ingelogd"] = 1;
				
				if($rows['ID_USERGROUP'] == 1){
					
					header("Location: /admin_index.php");
				}else{
					$_SESSION["li"] = $rows['logged_in'];
					header("Location: /customer_index.php");
				}

De redirect doet overigens ook bijzonder weinig, dus het komt erop neer dat het hele inloggedeelte naar de ***** is. Het ligt niet aan de databaseverbinding, want dat werkt allemaal nog. De sessievariabelen worden simpelweg niet aangemaakt.
 
Waarschijnlijk komt het omdat je gebruik maakt van dubbele quotes bij de $_SESSION-variabelen. Het is immers een array dus moet je enkele gebruiken.

Dat je header niet werkt is logisch:
Note: HTTP/1.1 requires an absolute URI as argument to » Location: including the scheme, hostname and absolute path, but some clients accept relative URIs. You can usually use $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] and dirname() to make an absolute URI from a relative one yourself
Bron

Je kunt moet dus de volledige url er neer zetten...

PHP:
//Dit moet helemaal bovenaan de pagina
session_start(); 

//Hmm, ik mis hier nog een query. Ga ervanuit dat die hierboven staat.
if (mysql_num_rows($resultaat) > 0) {
  $rows = mysql_fetch_assoc($resultaat); 
  $_SESSION['id_user'] = $rows['ID_USER']; 
  $_SESSION['id_usergroup'] = $rows['ID_USERGROUP']; 
  $_SESSION['ingelogd'] = 1;
  $host  = $_SERVER['HTTP_HOST'];
  $uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
  if($rows['ID_USERGROUP'] == 1) {
    header("Location: http://$host$uri/admin_index.php"); 
  } else {
    $_SESSION['li'] = $rows['logged_in'];
    header("Location: http://$host$uri/customer_index.php"); 
  }
}
 
Laatst bewerkt:
Bedankt, maar het biedt geen oplossing. Er gebeurt nog steeds helemaal niets.
 
Ok, even overnieuw, want het wordt niks zo. :P

Ik heb net geprobeerd de sessievariabelen te echo-en, voor de header. Dat lukte, maar als ik daarna naar een pagina ging die content presenteerde afhankelijk van de user_id als opgeslagen in de sessie, werkte het niet meer en leken de sessievariabelen leeg. De header werkt nog steeds niet, terwijl ik zowel $host als $uri heb geëchod, waar een positief resultaat uit voortkwam.

Oftewel, ik snap het niet meer!

Om die reden maar even de hele index.php, dus de loginpagina, om te zien of iemand er wel uit kan komen.

PHP:
<?php

$pageTitel = "Home - Login";

require "inc/header.php";
//  Het volgende is de inhoud van het bestand 'header.php'.

<html>
	<head><title>Projectapplicatie - <?php echo $pageTitel; ?></title>
	<?php require "styles/style.css"; ?>
	</head>
	<?php 
	//error_reporting(1);
	session_start();
	require "mysql_pa.php";
	
	if($pageTitel != "Home - Login"){
	require 'logincheck.php';
	}
	

// Einde van de header, terug naar index.php.

$uuserid = $_SESSION['id_user'];

if(!$uuserid){

// Controleren of degene op index.php (de inlogpagina) komt al ingelogd is.

$check = $_POST['check'];


if($check != 1){

// Zo niet, wordt het inlogformulier erbij gehaald. Dat is verder niets bijzonders, hoef ik niet hier neer te zetten.

	require "forms/login.php";

	}else{
		
		$mail = trim($_POST['mail']);
		$pass = trim($_POST['pass']);
		$md5 = md5($pass);
		
// Gebruikelijke variabeledeclaraties en validaties.


		if($mail == "" OR $pass == ""){
			echo "E-mailadres of wachtwoord niet ingevuld!<p/>";
			require "forms/login.php";
			
		}else{
			
			$checkLogin = "SELECT ID_USER, ID_USERGROUP, logged_in FROM users WHERE mail='".$mail."' AND pass='".$md5."'";
				$resultaat  = mysql_query($checkLogin); 

// Query uitvoeren om te kijken of alles goed is.

	if (mysql_num_rows($resultaat) > 0) {

// Zo ja; alle sessievariabelen aanmaken.

  $rows = mysql_fetch_assoc($resultaat); 

  $_SESSION['id_user'] = $rows['ID_USER']; 
  $_SESSION['id_usergroup'] = $rows['ID_USERGROUP']; 
  $_SESSION['ingelogd'] = 1;
  $host  = $_SERVER['HTTP_HOST'];
  $uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
    
// Kijken degene die inlogt bij usergroup 1 of 2 hoort.

	$idug = $rows['ID_USERGROUP'];
	
  if($idug == 1) {

// Het is usergroup 1, dus gaan we naar admin_index.php. De header werkt niet, het echo-en van de sessievariabelen wel. Als ik op dit punt gewoon in de browser bijvoorbeeld 'editprofile.php' intyp, dat werkt met sessievariabelen (user-id) werkt dat niet, ook al worden ze hierboven correct aangemaakt.

	echo $_SESSION['id_user'];
	echo $_SESSION['id_usergroup'];
	echo $_SESSION['ingelogd'];
    header("Location: http://$host$uri/admin_index.php"); 
	exit;
  } else {

// Het is geen admin, dus een klant. In dat geval wordt er doorverwezen naar de klantindexpagina.

    $_SESSION['li'] = $rows['logged_in'];
    header("Location: http://$host$uri/customer_index.php"); 
  }

				}else{
				
					echo "Uw mailadres en wachtwoord kwamen niet overeen, probeer het nog eens.<p/>";
					require 'forms/login.php';
				}

// De query is mislukt, dus de login is niet helemaal goed gegaan.

		}
	}
	
}else{
	echo "U bent al ingelogd.";
}

// Helemaal bij die eerste if waar je controleert of 'id_user' aanwezig is in de sessie. Dit is dus als het antwoord 'ja' is, en je dus al ingelogd bent.

require "inc/footer.php";

// En de footer, die niet van belang is.

Dat is het, en ik heb geen idee waar de fout zit.
 
Ooit deze pagina doorgelezen?

Daar zie je dit staan:
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP.

Er mag dus geen output voor een header komen... Daar ga jij de fout al mee in require "inc/header.php"

Daar zit ongetwijfeld output in...

Het is dan beter om een <meta http-equiv="refresh" content="0;URL=http://www.jouwadres.nl/" /> te gebruiken.

Kijk hier even voor meer uitleg. Let wel dat gebruikers zo'n refresh uit kunnen schakelen. Je kunt dit verhelpen door wat text neer te zetten van

U bent ingelogd.

Wanneer u niet automatisch door wordt gestuurd klikt u hier om verder te gaan.

Ook had ik gezegd dat je beter session_start(); bovenaan de pagina kunt zetten.

Let wel dat je op elke pagina waarin je die variabelen wilt aanroepen weer session_start(); bovenaan zet.
 
Laatst bewerkt:
Wat is dat voor rare grap van PHP dan? En hoe kan ik 'm laten redirecten naar locatie X afhankelijk van de usergroup waarmee is aangemeld, door middel van die meta?
 
Pagina zeker niet gelezen?:rolleyes:
 
Jawel, maar daar staat - volgens mij - niets over een redirect afhankelijk van bepaalde input. Ik heb nu sowieso die redirects weggehaald, en heb nu gewoon een "Je bent ingelogd, klik hier." Waar bij 'hier' uiteraard een link is naar admin_index of customer_index, maar toch werken die sessievariabelen niet. Enig idee waarom dat is?
 
Ah, zonder dat ik iets veranderde werkt het nu wel...bedankt!
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan