Vinnaren i pepparkakshustävlingen!
2013-02-22, 07:18
  #1
Medlem
Håller på och bygger ett litet cms i ubildningsyfte och har några funderinga ang det här med sessions.

Om vi tar ett exempel på hur min index.php sida ser ut i min admin folder:

HTML-kod:

<!DOCTYPE html>
	<head>
		<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
		<link rel="stylesheet" href="admin.css" type="text/css" media="all">
		<title>QSS - admin area</title>
	</head>

	<body>
		<div class="wrapper">
			<?php
			session_start();
			if(isset($_SESSION['user'])) {
			?>
			<span>Logged in! Welcome <?php echo $_SESSION['user']; ?></span>
			<a href="logout.php">Logout</a>
			<ul class="topnav">
				<li><a href="index.php">Home</a></li><li><a href="posts.php">Manage Posts</a></li><li><a href="cats.php">Manage Categories</a></li><li><a href="pages.php">Manage Pages</a></li>
			</ul>
			<div class="content">
			
			</div>
			<?php
			} else {
				header("Location: login.php");
			}
			?>
		</div>
	</body>

</html>

Som ni ser har jag session i början av min wrapper och sedan ett else statement längst ner. Behöver jag göra detta på ALLA sidor under min adminfolder för att ingen ska kunna komma åt sidorna utan att vara inloggad?

Jag försökte göra en två include filer, där jag klistrade in session i den ena och sedan else statementet i det andra, alltså exakt som jag har nu fast i två includes istället. Detta fungerade inte. Kan jag ha mitt else statement i samma fil som sessions eller MÅSTE mitt else statement vara i slutet av varje sida som nu? Det vore ju skönt att kunna includa detta istället för att behöva skriva samma kod på varje sida.
Citera
2013-02-22, 07:26
  #2
Moderator
Protons avatar
Den där koden lär inte kunna funka speciellt bra.

session_start() måste du ha längst upp i ditt script, innan någon som helst utskrift skett, annars kommer scriptet att krascha. Läs på hur sessions funkar.

Ett bättre alternativ till det du föreslog är ju att includa innehållet i en fil som kollar behörigheter etc. På det sättet får du ju session-kontrollen och dess else att husera i samma fil vilket skulle kunna ställa till stor huvudvärk för dig längre fram om du var tvungen att hålla reda på måsvingematchning etc i flera olika filer.
Citera
2013-02-22, 07:59
  #3
Medlem
Citat:
Ursprungligen postat av Proton
Den där koden lär inte kunna funka speciellt bra.

session_start() måste du ha längst upp i ditt script, innan någon som helst utskrift skett, annars kommer scriptet att krascha. Läs på hur sessions funkar.

Ett bättre alternativ till det du föreslog är ju att includa innehållet i en fil som kollar behörigheter etc. På det sättet får du ju session-kontrollen och dess else att husera i samma fil vilket skulle kunna ställa till stor huvudvärk för dig längre fram om du var tvungen att hålla reda på måsvingematchning etc i flera olika filer.

Oki nu har jag lagt sessions längst upp varje fil och else statementet längst ner i varje fil. Men som sagt skulle gärna göra en include av hela session och redirect till login.php istället för att ha det som nu. Har du lust att ge något exempel på hur detta skulle kunna se ut?

Inte såhär?:

Kod:
session_start();
if(isset(
$_SESSION['user'])) {

} else {
header"Location: login.php";

Citera
2013-02-22, 09:43
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av HerbsandInk
Kod:
session_start();
if(isset(
$_SESSION['user'])) {

} else {
header"Location: login.php";

Det är väl inget fel på den där kodsnutten. I Iffen stoppar du in din html(och mer php om så önskas. Det finns ju däremot inget som säger att du behöver stoppa i samma html däri gång på gång, utan det kan du ju styra med en parameter. På det sättet så kommer du ju runt det problemet du hade, dels startar och kollar du sessionen i en och samma fil, dels kan du även skriva ut massa olika php-grejjor i din if.
Citera
2013-02-22, 12:42
  #5
Medlem
Bongomans avatar
Citat:
Ursprungligen postat av Proton
Det är väl inget fel på den där kodsnutten. I Iffen stoppar du in din html(och mer php om så önskas. Det finns ju däremot inget som säger att du behöver stoppa i samma html däri gång på gång, utan det kan du ju styra med en parameter. På det sättet så kommer du ju runt det problemet du hade, dels startar och kollar du sessionen i en och samma fil, dels kan du även skriva ut massa olika php-grejjor i din if.

Det där ser jag många fel med. Hur ska man kunna lägga in huvudinnehållet inne i en if om den huserar i en include som inkluderas innan innehållet. Det verkar problematiskt. Ett segment kan heller inte delas upp på flera filer. Det går helt enkelt inte att starta en if i en include och avsluta den i en annan. Det enda rätta är att bryta exekveringen med en exit om behörighet saknas.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback