Avatar billede dagreyman Nybegynder
10. juli 2008 - 13:08 Der er 7 kommentarer og
1 løsning

Session fejler ved refresh

Hej alle,

Jeg har lavet et login system, hvor jeg har et problem.

Har en checklogin.php som sætter:
session_register("myusername");

og i admin.php tjekker jeg om den er sat og hvis den ikke er, så sendes man til login.php:
session_start();
if(!session_is_registered(myusername)){
header("location:login.php");
}

Mit problem er at når jeg refresher mens jeg er på admin.php eller trykker på en knap i en form, så bliver jeg sendt til login.php

Som om at den ikke kan finde myusername ved genindlæsning.

Nogen der kan hjælpe?
Avatar billede jakobdo Ekspert
10. juli 2008 - 14:25 #1
Du skal ikke bruge session_register() og session_is_registered(myusername);

Du bør lave noget ala dette i din login.php

session_start();
if(BRUGEREN_SKAL_LOGGES_IND){
$_SESSION['myusername'] = $username;
}

Og så din kontrol:

session_start();
if(!isset($_SESSION['myusername'])){
header("location: login.php");
exit();
}
Avatar billede dagreyman Nybegynder
10. juli 2008 - 17:22 #2
Hej jakobdo,
Jeg har prøvet den løsning tidligere og prøvede den igen, med det samme resultat, virker ikke :-(
Avatar billede jakobdo Ekspert
10. juli 2008 - 17:34 #3
Lad os starte forfra så.
Hvordan set dit login-script ud ?
Avatar billede dagreyman Nybegynder
10. juli 2008 - 18:05 #4
check_login.php:
<?php
session_start();
ob_start();

mysql_select_db('users')or die("cannot select DB");
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$sql="SELECT * FROM $tbl_name WHERE user='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
$row_result = mysql_fetch_assoc($result);
$count=mysql_num_rows($result);

if($count==1){
  $_SESSION['myusername'] = $myusername;
  $_SESSION['mypassword'] = $mypassword;

  if($row_result['admin'] == '1'){
    header("location:users.php");
  }
  else {
    header("location:user.php");
  }
}
else {
  echo "Wrong Username or Password";
}

ob_end_flush();
?>

user.php / users.php:
<?PHP
session_start();
if(!isset($_SESSION['myusername'])){
  header("location: login.php");
  exit();
}
?>
Og så nogle forms og tabeller....
Avatar billede jakobdo Ekspert
10. juli 2008 - 21:26 #5
Prøv at ret navnene, så du ikke bruger samme navne i session og variabler, som du f.eks. gør her:

$myusername=$_POST['myusername'];
og
$_SESSION['myusername'] = $myusername;
Avatar billede dagreyman Nybegynder
10. juli 2008 - 22:21 #6
Jeg har fundet ud af fejlen, det var fordi jeg havde lavet en knap med session_destroy og den blev åbenbart aktiveret ved refresh, hvilket jeg på ingen måde forstår..
Men nu er det løst...

Jakobdo: Mange tak for din tid og råd, hvis du smider et svar så får du pointene for dit tidsforbrug :-)
Avatar billede jakobdo Ekspert
10. juli 2008 - 23:12 #7
Svar!
Avatar billede jakobdo Ekspert
11. juli 2008 - 08:42 #8
Takker for point.
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