Probleem $_SESSION

Status
Niet open voor verdere reacties.

ner0987

Gebruiker
Lid geworden
6 mei 2010
Berichten
59
Hallo iedereen,
als startend php programmer ben ik zelf alvast wat aan het studeren (opleiding begint pas in september).
Ik kom volgend probleem tegen, ik heb alles reeds tig keer overlopen, maar ik zie niet wat ik fout doe :(

Wanneer ik "inlog" op de site zou deze mij moeten tonen dat ik ingelogd ben.
In plaats daarvan krijg ik terug het inlogscherm te zien.

Index file:
PHP:
<?php
include 'include.php';
require 'connect.php';

if (loggedin()) {
	echo "You're logged in";
} else {
	include 'login.php';
}
?>

include file:
PHP:
<?php
ob_start();
session_start();
$current_file = $_SERVER['SCRIPT_NAME'];

function loggedin(){
	if (isset($_SESSION['user_id'])&&!empty($_SESSION['user_id'])) {
		return true;
	} else {
		return false;
	}
}
?>

login file:
PHP:
<?php 
require 'connect.php';

if (isset($_POST['uname'])&&isset($_POST['pass'])){
	$uname = $_POST['uname'];
	$pass = $_POST['pass'];
	$pass_hash = md5($pass);
	
	if (!empty($uname)&&!empty($pass)) {

		$query = "SELECT `id` FROM `users` WHERE `uname`='$uname' AND `pass`='$pass_hash'";
		if ($query_run = mysql_query($query)) {
			$query_num_rows = mysql_num_rows($query_run);
			
			if ($query_num_rows == 0) {
				echo "Invalid username or password";
			}  else if ($query_num_rows == 1) {
				$user_id = mysql_result($query_run, 0, 'id');
				$_SESSION['user_id']=$user_id;
				header('location: index.php');
			}
		}
	
	} else {
	echo "You must enter a username and password";
	}
}

?>

<h2>Log in/Register</h2>
<form action="login.php" method="post">
	Username: <input type="text" name="uname">
	Password: <input type="password" name="pass">
	<input type="submit" value="Log in">
	<a href="register.php">Register</a>
</form>

Wanneer ik $_SESSION['user_id'] echo op regel 19 geeft hij wel de correcte user_id weer.

Even zelf verder redeneren:
index.php vernieuwt
function loggedin() word aangeroepen
$_SESSION['user_id'] is set en niet leeg
toch krijg ik een return false waar ik een true verwacht...

Waarschijnlijk iets simpel, maar na 3u zoeken weet ik het echt niet meer.
Alvast bedankt!
 
Ok, nu werkt het inderdaad, bedankt :)...
Maar nu snap ik het niet meer goed :o

login.php word aangeroepen door index.php.
op index.php word include.php aangeroepen.
Aangezien ik dus in feite index.php niet verlaat ( login is included in index ) word die session_start toch aangeroepen via index.php, en als allereerste stap?

Ik mag include.php ook niet volledig opnieuw aanroepen in login.php want dan krijg ik een foutmelding...
 
Ja, maar je form in login.php word verstuurd naar login.php. Daar komt index.php dus niet aan te pas. Dus word je session niet gestart. Daardoor kan je variablen schrijven in je session.

(je zou in je require_once kunnen gebruiken om include.php te includen. )

Moet ook zeggen dat je een rare opbouw gebruikt, maar als beginner is het zo slecht nog niet :thumb:


Mocht je nog vragen hebben, ik hoor t wel ;)
 
Laatst bewerkt:
Die require_once was ik inderdaad ook net achter. Ik denk dat ik dat maar ga doen voorlopig.
Na jouw reactie en zelf even verder te kijken zie ik idd waar de fout zit en hoe het komt...

Wat bedoel je precies met de rare opbouw?
Ik probeer idd momenteel het één en ander uit, wat de optimale code is weet ik idd nog niet :)

Ik weet wel dat bovenstaande code gevoelig is voor SQL injection, daar leer ik momenteel wat meer over en word gaandeweg aangepast...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan