Door
Dennis van DUin
op 01-02-2015 11:17
gewijzigd op 01-02-2015 11:38
1.571 views
Beste mensen,
Ik probeer op mijn site in te loggen met sessions. Nu hoeft het niet heel erg beveiligd te zijn maar is het meer even voor het oog. Nu heb ik dit gemaakt en een deel via internet gekregen. Maar na het inloggen stuurt hij me niet door naar mijn admin_home pagina... hij gaat gewoon terug naar de login pagina. De andere beveiligde paginas kan ik nu wel bezoeken. En als ik uitlog kan dit niet meer dus hiermee weet ik dat de sessions en de login wel werk. Maar ik wil dat als hij goed inlogt hij me doorstuurt naar de admin_home
Mijn code is:
<?php
include("config.php");
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST")
{
// username and password sent from Form
$myusername=mysqli_real_escape_string($db,$_POST['username']);
$mypassword=mysqli_real_escape_string($db,$_POST['password']);
$sql="SELECT id FROM admin WHERE username='$myusername' and passcode='$mypassword'";
$result=mysqli_query($db,$sql);
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);
$active=$row['active'];
$count=mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1)
{
$_SESSION['login_user']=$myusername;
header("location: admin_home.php");
exit;
}
else
{
$error="Your naam of wachtwoord is niet goed.";
}
}
<?php
include("config.php");
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST")
{
// username and password sent from Form
$myusername=mysqli_real_escape_string($db,$_POST['username']);
$mypassword=mysqli_real_escape_string($db,$_POST['password']);
Twee dingen die mogelijk zouden kunnen gebeuren en door wat te testen kun je weten wat er gebeurt:
a) hij komt niet in de if() op regel 9 en je wordt dus niet doorgestuurd naar admin_home.php. (Officeel moet location: met een Hoofdletter L geschreven worden volgens mij).
b) Je wordt wel doorgestuurd naar admin_home.php maar op admin_home.php denkt ie dat je niet bent ingelogd en wordt je weer teruggestuurd naar login.php
Eventueel kun je admin_home.php nog voor een stukje met ons delen.
Ik heb beide even gecontroleerd en ik heb het gevoel dat hij helemaal niet in de IF komt. Ik heb Location veranderd naar een hoofdletter L. En ik heb op mijn home pagina de controle weggehaald:
<?php
include('config.php');
session_start();
$user_check=$_SESSION['login_user'];
$ses_sql=mysqli_query($db,"select username from admin where username='$user_check' ");
$row=mysqli_fetch_array($ses_sql,MYSQLI_ASSOC);
$login_session=$row['username'];
if(!isset($login_session))
{
header("Location: admin_login.php");
}
?>
Deze heet sleutel.php en ik heb dit boven aan elke pagina die beveiligd is staan door middel van de deze code:
Ook: gaat mogelijk het verbinden met je database of het uitvoeren van de query mis? Wellicht wil je voor je database een eenvoudige wrapper class gebruiken waarin wat foutafhandeling zit.
EDIT:
Waarom controleer je niet rechtstreeks $_SESSION?
Ik krijg deze errors nu ik dat van jou neer heb gezet:
Notice: A session had already been started - ignoring session_start() in /home/haastrechtloop.nl/public_html/admin_logout.php on line 32
Warning: Cannot modify header information - headers already sent by (output started at /home/haastrechtloop.nl/public_html/admin_logout.php:22) in /home/haastrechtloop.nl/public_html/admin_logout.php on line 35
[size=xsmall]Toevoeging op 01/02/2015 12:57:17:[/size]
De eerste is een notice. Blijkbaar heb je de session_start() functie al eerder aangeroepen. Op zich niet zo een ramp. De tweede is een veel gestelde vraag op dit forum.
Je mag voordat je een header() functie aanroept nog geen enkele output verzonden hebben. Output is onder andere iedere echo, ieder stukje HTML, een witregel, een spatie, een ENTER en ook onzichtbare karakters zoals bijvoorbeeld de null byte. Dit geldt voor je PHP landingspagina maar ook voor alle php bestanden die je included hebt.
Je set de variabele:
$login_session=$row['username'];
En dan kijk je of ie geset is.
if(!isset($login_session))
Ja dus, want dat heb je net zelf gedaan.
Dus de header wordt nooit bereikt.
Dit is de logout code en deze werkt helemaal hoor...
Naar het andere ga ik even kijken!
[size=xsmall]Toevoeging op 01/02/2015 16:33:02:[/size]
Frank Nietbelangrijk op 01/02/2015 12:10:37
wat krijg je wel te zien?
[size=xsmall]Toevoeging op 01/02/2015 12:57:17:[/size]
De eerste is een notice. Blijkbaar heb je de session_start() functie al eerder aangeroepen. Op zich niet zo een ramp. De tweede is een veel gestelde vraag op dit forum.
Je mag voordat je een header() functie aanroept nog geen enkele output verzonden hebben. Output is onder andere iedere echo, ieder stukje HTML, een witregel, een spatie, een ENTER en ook onzichtbare karakters zoals bijvoorbeeld de null byte. Dit geldt voor je PHP landingspagina maar ook voor alle php bestanden die je included hebt.
Hoe kan ik dit dan oplossen? Ik kan de php code bovenaan de pagina zetten maar dan gebeurd het nog steeds...
[size=xsmall]Toevoeging op 01/02/2015 16:42:49:[/size]
Na het inloggen herlaad hij niet de hele pagina trouwens! Hij gaat tot de Exit... en de rest wordt niet weergegeven...
van het begin tot je code tot de header() functie daar gaat hem om. en ook om config.php. De ?> kun je onderin de config.php gewoon weglaten dat kan voorkomen dat er nog even een spatie oid achter ?> staat die dan als output gezien wordt. voor <.php mag absoluut niets staan.
Het kan ook nog een Byte Order Mark zijn (BOM). Dit is op te lossen door met een goede editor (notepad) de bestanden opnieuw aan te maken en de inhoud te kopieren en te plakken in de nieuwe bestanden.