Kjapp og trygg hosting for Wordpress

Kan du fortelle meg litt om hvordan $_SESSION funker?

Mr Vest

Sjefen over alle sjefer!
Jeg er i ferd med å bli steike gal i hodet folkens. Hurra for meg. URK!

Nei, altså. Jeg trodde jeg hadde litt grepet på dette her med Sessions og Coocies nå, men her er det noe jeg overhodet ikke forstår.

Kode:
<?php
session_start();
$_SESSION[loggedin]=1;
if($_SESSION[loggedin]==1)
{
echo'Brukeren er innlogget';
}
else
{
echo'Brukeren er utlogget';
}
?>

Nuh... Vil noen snille dudes eller hotte damer fortelle meg hva i alle dager som gjør at denne gir meg "Brukeren er utlogget" ? Jeg holder å å rive av meg hodet og det som verre er her jeg sitter fordi denne bare ikke kan funke liksom. Æsj.

På forhånd, takk! :)
 

Mr Vest

Sjefen over alle sjefer!
Ser nok ikke ut til at det hjalp å legge til dem.

Hva er dem egentlig til? Hos meg har det fungert utmerket og drite i disse både på SESSION, GET og POST.
 

to-ov

Medlem
For å være ærlig så vet jeg ikke hva de har å si, men det har aldri fungert uten hos meg.
Og dette gjelder post, get og sessions.

Men eksemplet ditt fungerte på min server når jeg la til ''.
 

Mr Vest

Sjefen over alle sjefer!
Hmm, merkelig. Jeg får se på om jeg ikke drar meg til å legge inn disse '' etterhvert. Er litt vant med å ikke bruke dem nå.

Nå fant jeg ut noe her. Det har noe med session_start() og gjøre. Dvs, session_start() ligger jo da i index.php, mens det er på index2.php det ikke fungerer når jeg sjekker om $session['loggedin'] er satt til 1. Den blir satt til 1 i index.php, hvor den da sjekker riktig, mens det er i index2.php den ikke finner verdien på den.

Jeg forsøkte å flytte session_start() fra index.php opp til header.php, som da blir inkludert i både index.php og index2.php, men da får jeg feilmelding.. Hvorfor det?

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at header.php in xxx..

Oppdatert: Nuh, når jeg la inn session_start(); helt oppe i toppen, så langt oppe i greiene som man kunne komme på header.php, da skulle det nå merkelig nok fungere. Blir ikke riktig klok på det her jeg, men nå funker det hvertfall. Og jeg vet at nå at session_start(); alltid må inn før bådt <html> og hele pakka på headern.

Takk skal du ha for svarene dine to-ov. Ryktepoeng gitt. :)
 
Sist redigert:
Hvis du skriver ['loggedin'] eller ["loggedin"] betyr det at du vil ha det elementet fra arrayen som har nøkkelen "loggedin". Skriver du [loggedin] betyr det at du vil ha det elementet fra arrayen hvor nøkkelen er lik verdien i konstanten loggedin. Forskjellen på loggedin og "loggedin" er altså ikke ulik forskjellen på $loggedin og "loggedin", og dem ser du vel forskjell på?

To ting er viktige med session_start(): den skal være med i eller inkludert i ALLE filer du bruker sessions i, og den skal behandles som en header: den må altså kjøres FØR du har noen som helst output til nettleseren, inkludert whitespace. Du har sannsynligvis enten en echo/print eller en ?> lenger opp i header-fila?
 

Mr Vest

Sjefen over alle sjefer!
Jeg vet ikke hva jeg skal svare på det du spør om olafmoriarty. Jeg forstod ikke forklaringa helt sånn 100%.

Takk for en meget god forklaring du hadde på hvordan man skulle bruke session_start(). Det forste jeg forsøkte var å legge den (bare for å ha en plass) mellom </head> og <body>. Det ble galt. Når jeg gjorde som du skrev, tok den før alt annet fungerte den mycket bra.
 
Hvis du benytter deg av en "knutepunkt-fil" Atle, som jeg gjør så holder det å legge inn session_start() og eventuellt ob_start() der.

Jeg har alltid en fil der jeg inkluderer libs, eventuelle globale funksjoner og definisjoner.
Si f.eks Global.php. Denne filen blir hentet inn i alle andre filer.

Eks:
Global.php
PHP:
<?php
ob_start();  // For COKKIES, def. først.
session_start();

define('Included',true);

// Include libs
require_once('libs/SecurityFunctions.php');
require_once('libs/SiteSettings.php');
require_once('design/theme.php');
?>

index.php
PHP:
<?php
require_once('Global.php');   // Trenger ikke session_start(), da den allerede er sendt i global.php, og filen er inkludert før noe annet output\html.

// HTML head, body osv kommer her
?>

libs/SiteSettings.php
PHP:
<?php
require_once('../Global.php');
if(!defined('Included')) { die('Denne filen kan ikke kjøres direkte!'); }

// DIV side innstillinger, gjerne med bruk av session verdier da session start er sendt i global.php
?>
 

Mr Vest

Sjefen over alle sjefer!
Litt morsomt du skulle nevne det Daniel, det var nemlig en tilsvarende løsning jeg endte opp med til slutt. :)
 
Topp