Avatar billede starf Nybegynder
02. marts 2015 - 14:46 Der er 15 kommentarer og
1 løsning

php og session i 5.6

session_start();
session_register("myusername");
session_register("mypassword");
session_register("usertype");
$_SESSION['username'] = $myusername;
  $_SESSION['usertype'] = $usertype;
    $_SESSION['userid'] = $userid;

sådan ser min kode ud i php 5.3

hvordan vil man lave dette i version 5.6? nogle der har et link til en simple login, med session? som man kan lære af? (jeg er ikke så god til at læse docs, har mere brug for at se det i brug)
Avatar billede starf Nybegynder
02. marts 2015 - 15:50 #1
ser ud til jeg bare kan gøre følgende kun:

$_SESSION['username'] = $myusername;
  $_SESSION['usertype'] = $usertype;
    $_SESSION['userid'] = $userid;

og fjerne alt den anden. Men hvordan vil man så gøre følgende, for at tjekke om der er en session og hvis ikke, sende brugeren væk?

if(!session_is_registered(myusername)){
header("location:index.php");
}
Avatar billede starf Nybegynder
02. marts 2015 - 16:12 #2
hvis jeg omskriver session_is_registered til:

if(isset( $_SESSION['username'])){
header("location:index.php");
}

så virker siden, men det beskydter ikke direkte imod at man kan tilgå side uden login. ?

login del:

$_SESSION['username'] = $myusername;
  $_SESSION['usertype'] = $usertype;
    $_SESSION['userid'] = $userid;
header("location:site_admin.php");
}
else {
echo "forkert brugernavn eller password";
}

sider der skal beskydtes imod login:

if(isset( $_SESSION['username'])){
header("location:index.php");
}

ud fra hvad jeg har læst mig til, så virker sessoinstart ikke mere, så skal man ikke skrive noget mere for at tilgå sine sessions per side?
Avatar billede cht22 Professor
02. marts 2015 - 17:22 #3
Tidligere skulle man altid bruge session_start før man kunne bruge session, skal man ikke det i den nye version af PHP?

Du mangler noget kode eller virker det ikke det du har?
Avatar billede starf Nybegynder
02. marts 2015 - 17:52 #4
login:

  <link rel="stylesheet" type="text/css" href="admin.css" />
  <link rel="stylesheet" href="sample.css"><br><br>


<div>
<h1>LiveWeb CMS</h1>
<form name="form1" method="post" action="checklogin.php">
<p>
<b>Brugernavn:</b><br><input name="myusername" type="text" id="myusername"><br>
<b>Password:</b><br><input name="mypassword" type="password" id="mypassword"><br><br>
<input type="submit" name="Submit" value="  Login  ">
</p>
</form>
</div>

checklogin.php
http://pastebin.com/24yAuC7F

del der er på siderne for at tjekke om man er logget ind:

<?php
session_start();
if(!session_is_registered(myusername)){
header("location:index.php");
}
?>

alt dette vikrer i 5.3, og skla bare laves om så det virker i 5.6 Jeg er godt klar over jeg også bør lave min sql om, til pdo eller sådan. Men først skal jeg lige have løst session delen.
Avatar billede moddi100 Seniormester
02. marts 2015 - 20:03 #5
Lidt generelt om sessions i PHP:

<?php

// Initialiser sessions, skal ALTID ske når du skal bruge sessions,
// og skal være sket inden der udskrives noget, eller bruges f.eks.
// ved brug af funktionen header(), som du jo anvender.

session_start();


// Lav en variabel
$_SESSION['test'] = 'det virker';

// Test om en given variabel findes
if(isset($_SESSION['test']))
{
  echo "Findes, værdien er: " . $_SESSION['test'];
} else {
  echo "Findes ikke";
}

// Slet en variabel
unset($_SESSION['test']);

?>
Avatar billede starf Nybegynder
02. marts 2015 - 20:14 #6
Men session_start virker vel ikke i php 5.6?
Avatar billede moddi100 Seniormester
02. marts 2015 - 20:55 #7
Det gør den skam, sessions har ikke ændret sig på det punkt. Prøv at lave et simpelt eksempel på din hjemmeside:

test.php
<?php

session_start();

if(isset($_SESSION['n']))
  $_SESSION['n'] += 1;
else
  $_SESSION['n'] = 1;

echo "Session: " . $_SESSION['n'];
?>


Denne fil uploader du, og så prøver du at gå ind på den flere gange. Så vil du se at variablen hele tiden voksen
Avatar billede starf Nybegynder
02. marts 2015 - 21:15 #8
Du har ret den virker, men af en eller anden grund, når jeg forsøger at lave min 5.3 kode om til 5.6 så holder det bare op med at virke.

først så registere jeg min session og assigner nogle værdier og sender en vidre efter login:



if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"


session_start(); // start up your PHP session!


$_SESSION['username'] = $myusername;
  $_SESSION['usertype'] = $usertype;
    $_SESSION['userid'] = $userid;
header("location:site_admin.php");
}
else {
echo "forkert brugernavn eller password";
}

på siden der så skal "beskydtes" der har jeg en

session_start(); // start up your PHP session!
$username = $_SESSION['username'];
$usertype = $_SESSION['usertype'];
$userid = $_SESSION['userid'];

if(isset( $_SESSION['username'])){
header("location:index.php");
}

men selv om jeg tilgår siden direkte via private mode, så kan jeg fint tilgå den, uden at blive sendt væk. det eneste jeg har ændret siden min 5.3 kode er at session_registered er væk nu?
Avatar billede moddi100 Seniormester
02. marts 2015 - 21:28 #9
erstat alle "header()" kald med en mere nyttig fejl-kode. Eksempel:

if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"

session_start(); // start up your PHP session!


$_SESSION['username'] = $myusername;
$_SESSION['usertype'] = $usertype;
$_SESSION['userid'] = $userid;

die("Login OK. Sender dig til <a href='site_admin.php'>site_admin.php</a>");
}
else {
echo "forkert brugernavn eller password";
}


// Siden der skal beskyttes

session_start(); // start up your PHP session!

if(isset( $_SESSION['username'])){
die("Session er OK. Sender dig til <a href='site_admin.php'>index.php</a>");
}


Jeg tror dog ikke det er her fejlen ligger. Men prøv ovenstående og se om du overhovedet får sat din session. En god måde at teste på, er at have en ny fane, som du blot kan bruge til at aflæse de gemte værdier:

<?php

// vis.php

session_start();

echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>
Avatar billede starf Nybegynder
02. marts 2015 - 21:31 #10
kan det passe det bare er:

if(!isset( $_SESSION['username'])){
header("location:index.php");
}

altså ! forand isset der manglede, for nu ser det ud til at virke?

skal lige teste lidt mere.
Avatar billede moddi100 Seniormester
02. marts 2015 - 21:50 #11
! vender i hvert fald din if-sætning rundt, så den betyder lige det modsatte. Så selvom det kun er et enkelt tegn, kan det have ret stor betydning ;)
Avatar billede starf Nybegynder
02. marts 2015 - 21:51 #12
så det betyder faktisk hvis session username er tom, så skal den gå til header location?

du må gerne smide et svar.
Avatar billede starf Nybegynder
02. marts 2015 - 21:54 #13
et hurtigt spørgsmål:

nu når man ikke kan bruge session_register("myusername");

er det så en ok løsning at bruge:

$_SESSION['myusername'] = "1";

og så:
<?php
session_start();
if(!isset( $_SESSION['myusername'])){
header("location:index.php");
}
?>

eller er der en bedre måde?
Avatar billede moddi100 Seniormester
02. marts 2015 - 22:17 #14
Definitionen på "tom" skal vi lige have på plads. Når du anvender isset() kontrollerer du blot om en given variabel eksisterer - ikke dens værdi.

Derfor vil du opdage at følgende er sandt:
<?php

$var = '';

if(isset($var))
  echo "Vil ske, da variablen er sat";
else
  echo "Sker kun hvis variablen ikke er sat, men det er den jo netop, selvom den indeholder en tom værdi";

// Såfremt du gerne vil teste en variabel for indhold, kan du bruge empty():

if(!empty($var))
  echo "Variablen indeholder noget";
else
  echo "Variablen er tom";


Men ellers ville jeg anvende samme fremgangsmåde som i #13. Du skal i princippet blot kalde session_start(), hvorefter du kan bruge sessions som 'almindelige' variabler, der blot eksisterer på tværs af dine sider.

En sidste ting du lige skal huske, når du videresender med header() er, at browseren fortsætter med at udføre koden på resten af siden. Husk derfor at kalde exit(), efter hver redirect:

<?php
session_start();

if(empty($_SESSION['myusername'])){ // Du kan også anvende "!isset" fremfor "empty"
header("location:index.php");
exit(); // Stop udførslen
}

// Din beskyttede kode
?>
Avatar billede moddi100 Seniormester
02. marts 2015 - 22:17 #15
og et svar
Avatar billede starf Nybegynder
02. marts 2015 - 22:36 #16
tak fordi du tog dig tid til at forklare :)
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

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