PHP redirect werkt niet
Elk pagina van mijn website ziet als volgt in elkaar:
1. include header
2. de content
3. include footer
En nu heb ik aan het begin van de header.php de volgende regels toegevoegd:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if(!isset($_SESSION))
{
session_start();
} else {
header("Location: login.php");
exit(); // Quit the script.
}
{
session_start();
} else {
header("Location: login.php");
exit(); // Quit the script.
}
Helaas werkt bovenstaande code niet en ik kom netjes op pagina's terecht waar eigenlijk ingelogd moet worden.
Iemand een idee?
Zet session_start(); aan het begin van je script.
Bedankt voor je tip, helaas werkt het nog steeds niet.
Het begin van header.php heb ik nu als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if(!isset($_SESSION))
{
session_start();
} else {
header("Location: login.php");
exit(); // Quit the script.
}
require ('includes/config.inc.php');
error_reporting(E_ALL);
ini_set('display_errors', 'On');
ob_start();
$page_title = "Title page here!";
?>
if(!isset($_SESSION))
{
session_start();
} else {
header("Location: login.php");
exit(); // Quit the script.
}
require ('includes/config.inc.php');
error_reporting(E_ALL);
ini_set('display_errors', 'On');
ob_start();
$page_title = "Title page here!";
?>
Voordat je een nieuw bericht opent zou je misschien ook nog even willen reageren op je vorige topic of reageren met de boodschap dat je daar nog eens een nachtje (of twee) over slaapt?
ontopic: definieer "het werkt niet".
Daarnaast is dit:
equivalent met:
Als je nergens anders/eerder de sessie start (EDIT: kan iemand dit bevestigen/weerleggen? niet getest). De else zal dus nooit uitgevoerd worden.
Wellicht wil je controleren of de sessie leeg is en in dat geval redirecten? Of nog beter: controleer op datgene wat in de sessie zou moeten zitten, en redirect anders. En start altijd meteen je sessie met session_start().
Gewijzigd op 16/08/2017 23:00:08 door Thomas van den Heuvel
Thomas van den Heuvel op 16/08/2017 22:55:30:
Wellicht wil je controleren of de sessie leeg is en in dat geval redirecten? Of nog beter: controleer op datgene wat in de sessie zou moeten zitten, en redirect anders. En start altijd meteen je sessie met session_start().
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
session_start();
//Als een user inlogt maak je b.v. het volgende:
$_SESSION['user_id_ingelogd'] = 1; //Het id van de zojuist ingelogde user
?>
session_start();
//Als een user inlogt maak je b.v. het volgende:
$_SESSION['user_id_ingelogd'] = 1; //Het id van de zojuist ingelogde user
?>
Als dan bovenstaande sessie waarde gevuld is, toon je de gewenste pagina's. Anders toon je enkel de login.
Gewijzigd op 17/08/2017 07:27:44 door Peter K
Wat mijn vorig bericht betreft, heb je gelijk in :D
Ik ging idd over nadenken met wat ik precies bedoeld en zal daar later een reactie plaatsen :D
OT:
Wat bedoel met dat het niet werkt, is dat ik gewoon op index.php kom ipv dat ik geredirect wordt naar inlog pagina wanneer ik niet ingelogd ben.
Momenteel gebruik ik onderstaande code voor header.php
En voorheen werkte wel het eerste gedeelte met session, maar redirect code was niet aanwezig.
Verder vraag ik me af of het de juiste plek is om een session code in het header.php te plaatsen? Ik dacht nl dat zo moest, zodat het voor elk pagina geldt, toch?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
if(!isset($_SESSION))
{
session_start();
} else {
header("Location: login.php");
exit(); // Quit the script.
}
require ('includes/config.inc.php');
error_reporting(E_ALL);
ini_set('display_errors', 'On');
ob_start();
$page_title = "Title Page here!";
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title><?php echo $page_title; ?></title>
<link href="../includes/main.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script>
$(function() {
$( "#medicinename" ).autocomplete({
source: 'includes/search_medicinename.php'
});
});
$(function() {
$( "#genericname" ).autocomplete({
source: 'includes/search_genericname.php'
});
});
</script>
</head>
<body>
<div id="wrapper">
<div id="header">
</div>
<div id="content">
<div id="navigation">
<div id="nav">
<ul>
<li id="home"><a href="../index.php">Home</a></li>
<li id="medicines"><a href="../medicines.php">Medicines »</a>
<ul>
<li><a href="../medicines.php">Medicines »</a>
<ul>
<li><a href="../med_insert.php">Insert Medicines</a></li>
</ul>
</li>
<li id="medcomp"><a href="../medicinescompanies.php">Medicines companies »</a>
<ul>
<li><a href="../medcom_insert.php">Insert medicines company</a></li>
</ul>
</li>
<li id="medcount"><a href="../medicinescountries.php">Medicines countries »</a>
<ul>
<li><a href="../medcountry_insert.php">Insert medicines countries</a></li>
</ul>
</li>
<li id="medsupplier"><a href="../medsuppliers.php">Medicines suppliers »</a>
<ul>
<li><a href="../medsuppliers_insert.php">Insert medicines supplier</a></li>
</ul>
</li>
</ul>
</li>
<li id="finance"><a href="../medicinesfinance.php">Finance</a></li>
<li id="reports"><a href="../medicinesreports.php">Reports</a></li>
</ul></div><div id="search">
<form class="search" action="medicinesreports.php" method="get">
<input type="text" name="search" placeholder="Search for medicines...">
<button type="submit">Search</button>
</form></div>
<div id="profile"><p><?php
if(isset($_SESSION['user_id'])){
echo "<p class='login'>Welcome " . $_SESSION['firstname']. " " . "<a href='logout.php'>Logout</a></p>";
} else {
echo "<p class='login'><a href='login.php'>Login</a></p>";
}
?>
</p></div>
</div>
<div id="second-content">
<!--ending header-->
if(!isset($_SESSION))
{
session_start();
} else {
header("Location: login.php");
exit(); // Quit the script.
}
require ('includes/config.inc.php');
error_reporting(E_ALL);
ini_set('display_errors', 'On');
ob_start();
$page_title = "Title Page here!";
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title><?php echo $page_title; ?></title>
<link href="../includes/main.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script>
$(function() {
$( "#medicinename" ).autocomplete({
source: 'includes/search_medicinename.php'
});
});
$(function() {
$( "#genericname" ).autocomplete({
source: 'includes/search_genericname.php'
});
});
</script>
</head>
<body>
<div id="wrapper">
<div id="header">
</div>
<div id="content">
<div id="navigation">
<div id="nav">
<ul>
<li id="home"><a href="../index.php">Home</a></li>
<li id="medicines"><a href="../medicines.php">Medicines »</a>
<ul>
<li><a href="../medicines.php">Medicines »</a>
<ul>
<li><a href="../med_insert.php">Insert Medicines</a></li>
</ul>
</li>
<li id="medcomp"><a href="../medicinescompanies.php">Medicines companies »</a>
<ul>
<li><a href="../medcom_insert.php">Insert medicines company</a></li>
</ul>
</li>
<li id="medcount"><a href="../medicinescountries.php">Medicines countries »</a>
<ul>
<li><a href="../medcountry_insert.php">Insert medicines countries</a></li>
</ul>
</li>
<li id="medsupplier"><a href="../medsuppliers.php">Medicines suppliers »</a>
<ul>
<li><a href="../medsuppliers_insert.php">Insert medicines supplier</a></li>
</ul>
</li>
</ul>
</li>
<li id="finance"><a href="../medicinesfinance.php">Finance</a></li>
<li id="reports"><a href="../medicinesreports.php">Reports</a></li>
</ul></div><div id="search">
<form class="search" action="medicinesreports.php" method="get">
<input type="text" name="search" placeholder="Search for medicines...">
<button type="submit">Search</button>
</form></div>
<div id="profile"><p><?php
if(isset($_SESSION['user_id'])){
echo "<p class='login'>Welcome " . $_SESSION['firstname']. " " . "<a href='logout.php'>Logout</a></p>";
} else {
echo "<p class='login'><a href='login.php'>Login</a></p>";
}
?>
</p></div>
</div>
<div id="second-content">
<!--ending header-->
Toevoeging op 17/08/2017 21:51:30:
Update 1:
Op de header.php pagina heb ik de session code aangepast naar onderstaande code.
En de redirect werkt nu wel, maar nadat ik ingelogd ben op login.php dan gaat hij niet naar index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if(!isset($_SESSION['user_id']))
{
header ("Location: login.php");
exit(); // Quit the script.
} else {
session_start();
}
[/code]
En op de index.php heb ik bovenaan staan:
[code]
if(!isset($_SESSION))
{
session_start();
}?>
if(!isset($_SESSION['user_id']))
{
header ("Location: login.php");
exit(); // Quit the script.
} else {
session_start();
}
[/code]
En op de index.php heb ik bovenaan staan:
[code]
if(!isset($_SESSION))
{
session_start();
}?>
Maar via foutmelding-afhandeling krijg ik nu de foutmelding :
An error occurred in script '/includes/header.php' on line 7: A session had already been started - ignoring session_start()
Date/Time: 8-17-2017 22:48:21
Mijn concrete vragen zijn dus:
1. moet ik een sessie starten bovenaan de header.php zodat het voor elk pagina start?
2. Is het een vereiste dat ik nog een keer een sessie moet starten op elk ander pagina?
Dus de structuur zou als volgt eruit zien:
1. sessie starten
2.include header
3.content
4.include footer
Gewijzigd op 17/08/2017 21:54:48 door Mohamed nvt
Peter K op 17/08/2017 07:26:57:
Als dan bovenstaande sessie waarde gevuld is, toon je de gewenste pagina's. Anders toon je enkel de login.
Thomas van den Heuvel op 16/08/2017 22:55:30:
Wellicht wil je controleren of de sessie leeg is en in dat geval redirecten? Of nog beter: controleer op datgene wat in de sessie zou moeten zitten, en redirect anders. En start altijd meteen je sessie met session_start().
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
session_start();
//Als een user inlogt maak je b.v. het volgende:
$_SESSION['user_id_ingelogd'] = 1; //Het id van de zojuist ingelogde user
?>
session_start();
//Als een user inlogt maak je b.v. het volgende:
$_SESSION['user_id_ingelogd'] = 1; //Het id van de zojuist ingelogde user
?>
Als dan bovenstaande sessie waarde gevuld is, toon je de gewenste pagina's. Anders toon je enkel de login.
Heb je de reactie hierboven goed gelezen?
Include altijd header.php
in header.php zet je bovenaan je script gewoon als allereerste na de php opening
Ik heb de reacties hierboven wel goed gelezen, maar de volgorde stond niet goed en daarom werkt werkt het deels en dus niet helemaal.
En na het goed zetten van de volgorde is het probleem helemaal opgelost ;-)
In de header.php pagina heb ik nu bovenaan staan:
En op elke nieuw pagina heb ik de structuur als volgt:
Het kan echt geen kwaad om dat te doen.
Nu maak je een -naar mijn idee- onnodige voorwaarde aan om te kijken of de sessie-container bestaat. Ik heb geen idee met welk doeleinde.
Zorg er overigens wel voor dat je bij na een inlog een nieuwe sessieID aanmaakt met session_regenerate_id(). Dit voorkomt dat mensen vooraf je sessie kunnen kapen om zich als jouw voor te doen. Zodra die functie wordt uitgevoerd wordt die oude ID namelijk vernietigd, zodat de kopie ervan (die de hacker kan hebben) niet meer werkt.
Gewijzigd op 18/08/2017 15:28:01 door - Ariën -
Bovenaan de sessie staat de foutafhandeling...
Die voorwaarde om te controleren of er reeds een sessie bestaat, is om te voorkomen dat ik continue mails krijg m.b.t. session ingnore. Voorheen had ik hier erg last van, maar nadat ik controleer of er een sessie bestaat, behoren de mails m.b.t. session ignore tot het verleden :-)
Bedankt voor de tip om session_regenerate_id() te gebruiken ;-)
Voordat ik het ging gebruiken, heb ik even opgezocht en kwam onderstaande link tegen:
En het implementeren is erg eenvoudig.
Link: http://www.phptutorial.info/?session-regenerate-id
Wat staat er precies in die melding?
An error occurred in script '/includes/header.php' on line 7: A session had already been started - ignoring session_start()
Dan heb je al een session_start() staan. Dan zou deze dus onnodig zijn.
Heel vreemd, maar sinds die voorwaarde werkt het wel :D
Dan zal het wel een dubbele include zijn, vermoed ik.