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:

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?
Zet session_start(); aan het begin van je script.
Hallo - Ariën -,

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


<?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!";
?>

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:
<?php
if (!isset($_SESSION)) {
    session_start();
}
?>

equivalent met:
<?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().
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().


<?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.

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?

<?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-->


[size=xsmall]Toevoeging op 17/08/2017 21:51:30:[/size]

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

<?php
if(!isset($_SESSION['user_id'])) 
    {
        header ("Location: login.php");
		exit(); // Quit the script.
    	} else {
			session_start();
			
			}


En op de index.php heb ik bovenaan staan:
 
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
Peter K op 17/08/2017 07:26:57

[quote="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().


<?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.


[/quote]

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
<?php
session_start();
?>
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:


if(!isset($_SESSION)) 
    { 
        session_start(); 
    } 

En op elke nieuw pagina heb ik de structuur als volgt:

require ('includes/config.inc.php');
	include("includes/header.php");
	if (!isset($_SESSION['user_id'])) {
		header("Location: login.php");
		exit(); // Quit the script.
		}
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.
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
Huh, dat is wel raar dat je die melding krijgt?
Wat staat er precies in die melding?

Reageren