Avatar billede jackass- Nybegynder
04. juli 2006 - 11:29 Der er 6 kommentarer og
2 løsninger

Udvidede $_SESSION's?

Heys

Normal kan vi jo sætte en masse session variabler med:

$_SESSION['blabla'] = "noget";

Men hvis jeg fx gerne dynamisk vil styre adgang til bestemt sektioner på mit site, og være fri for at kontrollere alt live i databasen, kan man så ikke lave en udvidet session eller lign.? Jeg havde forestillet mig noget ala:

$_SESSION['AccessLevel'] = "User";
$_SESSION['AccessLevel']['Section1'] = "Read";
$_SESSION['AccessLevel']['Section2'] = "Write";
$_SESSION['AccessLevel']['Section3'] = "Read";

Således at variablerne egentlig ligger i en "mappestruktur" med en overordnet værdi, og nogle under-variabler som indeholder access til de forskellige sektioner?

Så kan man vel også udskrive dem som et array (idet antallet af under-variablerne vil variere) med print_r() eller noget og se hele strukturen?

/jack
Avatar billede Slettet bruger
04. juli 2006 - 13:42 #1
Det kan man (næsten) gøre lige som du beskriver.

Forskellen er bare, at i dit eksempel med AccessLevel lader du den indeholde både en enkelt streng "User" og et array, og det kan man ikke. Den skal enten indeholde en streng eller et array.

Derudover skal du være opmærksom på, at hvis man gemmer det hele i sessionsvariable, så vil det ikke blive påvirket af ændringer i databasen imens brugeren er logget ind. Så hvis admin sætter at brugeren nu kun må læse i sektion2, så træder det først i kraft næste gang, der blive læst fra databasen.
Avatar billede jackass- Nybegynder
04. juli 2006 - 15:35 #2
Det er jeg klar over, det er også meningen :)

Men hvordan definerer jeg så et array? Bare således?

$_SESSION['AccessLevel']['Section1'] = "Read";
$_SESSION['AccessLevel']['Section2'] = "Write";
$_SESSION['AccessLevel']['Section3'] = "Read";

..altså uden "moder-variablen" som ikke skal sættes?
Avatar billede taskmgr Nybegynder
04. juli 2006 - 17:13 #3
Det går galt hvis du gør sådan her:

$_SESSION['AccessLevel'] = "User";
$_SESSION['AccessLevel']['Section1'] = "Read";
...

Men brug den globale $_SESSION ligesom hvilket som helst andet (multidimensionalt) array:

$_SESSION['AccessLevel'] = array();
$_SESSION['AccessLevel']['Section1'] = "Read";
$_SESSION['AccessLevel']['Section2'] = "Write";
$_SESSION['AccessLevel']['Section3'] = "Read";

Du kan selvfølgelig også bruge foreach(), print_r(), osv. på dit $_SESSION array.
Kig evt. på min artikel omkring arrays i PHP, her på siden.
Avatar billede Slettet bruger
05. juli 2006 - 01:58 #4
Ja, således. Du kan også som taskmgr viser erklære $_SESSION['AccessLevel'] som et array først, men det er ikke strengt nødvendigt - dog en god ide.

Du kan også sagtens sætte flere niveauer på, hvis det skulle være interessant:

$_SESSION['AccessLevel']['Section4']['Main'] = "Read";
$_SESSION['AccessLevel']['Section4']['Subsection1'] = "Write";
$_SESSION['AccessLevel']['Section4']['Subsection2'] = "Read";

Og så fik du også lige set mit forslag til at sætte rettigheder for noget over sektionerne.

Jeg vil forresten anbefale at bruge tal i stedet for strenge til rettighederne - de fylder mindre og er hurtigere at sammenligne, og en god editor vil ofte have autofuldfør på navnene på de konstanter (eller variabler), man har værdierne defineret i.
Avatar billede jackass- Nybegynder
05. juli 2006 - 09:22 #5
Tak for det begge to..

sandbox: ja, bruger også tal, skrev bare tekst i håb om bedre at illustrere hvad formålet med de sessions var :)

Vil I smide svar, så er det en deler
Avatar billede taskmgr Nybegynder
05. juli 2006 - 10:33 #6
Velbekomme :)
Avatar billede Slettet bruger
05. juli 2006 - 15:28 #7
Jotak
Avatar billede taskmgr Nybegynder
02. september 2006 - 12:54 #8
Lukketid?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester