PHP redirect werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mohamed nvt

Mohamed nvt

16/08/2017 22:02:01
Quote Anchor link
Hallo allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
if(!isset($_SESSION))
    {
        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?
 
PHP hulp

PHP hulp

22/12/2024 07:52:02
 
- Ariën  -
Beheerder

- Ariën -

16/08/2017 22:10:15
Quote Anchor link
Zet session_start(); aan het begin van je script.
 
Mohamed nvt

Mohamed nvt

16/08/2017 22:15:37
Quote Anchor link
Hallo - Ariën -,

Bedankt voor je tip, helaas werkt het nog steeds niet.
Het begin van header.php heb ik nu als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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!";
?>
 
Thomas van den Heuvel

Thomas van den Heuvel

16/08/2017 22:55:30
Quote Anchor link
Hoi,

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (!isset($_SESSION)) {
    session_start();
}

?>

equivalent met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (true) {
    session_start();
}

?>

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
 
Peter K

Peter K

17/08/2017 07:26:57
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
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

?>


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
 
Mohamed nvt

Mohamed nvt

17/08/2017 21:29:27
Quote Anchor link
Hallo Thomas van den Heuvel,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 &raquo;</a>
                        <ul>
                          <li><a href="../medicines.php">Medicines &raquo;</a>
                            <ul>
                              <li><a href="../med_insert.php">Insert Medicines</a></li>
                            </ul>
                          </li>
                          <li id="medcomp"><a href="../medicinescompanies.php">Medicines companies &raquo;</a>
                            <ul>
                              <li><a href="../medcom_insert.php">Insert medicines company</a></li>
                            </ul>
                          </li>
                          <li id="medcount"><a href="../medicinescountries.php">Medicines countries &raquo;</a>
                            <ul>
                              <li><a href="../medcountry_insert.php">Insert medicines countries</a></li>
                            </ul>
                          </li>
                          <li id="medsupplier"><a href="../medsuppliers.php">Medicines suppliers &raquo;</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)
PHP script in nieuw venster Selecteer het PHP script
1
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();
        }
?>

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

Peter K

18/08/2017 07:17:08
Quote Anchor link
Peter K op 17/08/2017 07:26:57:
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)
PHP script in nieuw venster Selecteer het PHP script
1
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

?>


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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
session_start();
?>
 
Mohamed nvt

Mohamed nvt

18/08/2017 15:12:18
Quote Anchor link
Hallo Peter K,

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
if(!isset($_SESSION))
    {
        session_start();
    }

En op elke nieuw pagina heb ik de structuur als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
require ('includes/config.inc.php');
    include("includes/header.php");
    if (!isset($_SESSION['user_id'])) {
        header("Location: login.php");
        exit(); // Quit the script.
        }
 
- Ariën  -
Beheerder

- Ariën -

18/08/2017 15:27:14
Quote Anchor link
session_start(); staat nog steeds niet helemaal bovenaan in je PHP-code.
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 -
 
Mohamed nvt

Mohamed nvt

19/08/2017 20:19:37
Quote Anchor link
Hallo - 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
 
- Ariën  -
Beheerder

- Ariën -

19/08/2017 22:29:59
Quote Anchor link
Huh, dat is wel raar dat je die melding krijgt?
Wat staat er precies in die melding?
 
Mohamed nvt

Mohamed nvt

20/08/2017 09:31:46
Quote Anchor link
De exacte foutmelding is:
An error occurred in script '/includes/header.php' on line 7: A session had already been started - ignoring session_start()
 
- Ariën  -
Beheerder

- Ariën -

20/08/2017 09:47:57
Quote Anchor link
Dan heb je al een session_start() staan. Dan zou deze dus onnodig zijn.
 
Mohamed nvt

Mohamed nvt

20/08/2017 11:26:32
Quote Anchor link
Jah. Initieel dacht ik dus ook, maar er staat daar dus geen session_start()...
Heel vreemd, maar sinds die voorwaarde werkt het wel :D
 
- Ariën  -
Beheerder

- Ariën -

20/08/2017 11:37:52
Quote Anchor link
Dan zal het wel een dubbele include zijn, vermoed ik.
 
Rob Doemaarwat

Rob Doemaarwat

20/08/2017 11:45:58
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.