Avatar billede nizo Nybegynder
06. marts 2005 - 14:23 Der er 46 kommentarer og
1 løsning

Admin session

Jeg har et brugersystem der i bund og grund virker fint nok.
Men jeg vil gerne ha en maade eller noget saa at én af brugerne er admin og har session adgang til noget som andre ikke paa se..
Jeg fik af hvide jeg skulle lave session saa den tjekker om man er admin, men jeg ved ikke hvordan man sætter session'en til at tjekke om man er admin :?
Nogle der ka hjælpe?
Evt. en anden løsning?

Tak paa forhaand
Avatar billede baitianlong Nybegynder
06. marts 2005 - 18:00 #1
Når admin logger på skriver du:

$_SESSION['admin'] = "ok";

Når du vil checke skriver du:

if(isset($_SESSION['admin'])) {
  //han er admin
} else {
  //han er ikke admin
}

på alle siderne, der vedrører dette skriver du session_start(); som første linie i php koden.
Avatar billede nizo Nybegynder
06. marts 2005 - 18:27 #2
Hvordan finder den ud af om man er admin?
Hvis man skriver $_SESSION['admin'] = "ok"; vil alle jo blive registreret som admin's..
Hva ska jeg gøre for at den finder ud af at én speciel bruger er admin?
Avatar billede baitianlong Nybegynder
06. marts 2005 - 19:05 #3
ja, du skal jo kun skrive den session var, hvis hans brugernavn er admin og passwordet er rigtigt.
Avatar billede nizo Nybegynder
06. marts 2005 - 19:08 #4
Ok, og hvordan gør man det?
Avatar billede baitianlong Nybegynder
06. marts 2005 - 19:27 #5
Du skriver du har et bruger system. Er der ikke brugernavne og passwords i det ?!?
Avatar billede nizo Nybegynder
06. marts 2005 - 19:37 #6
Jo og jeg har en session kode der tjekker om man er logget ind eller ej, men hvordan finder den ud af om en speciel bruger er admin?
Avatar billede baitianlong Nybegynder
06. marts 2005 - 20:29 #7
du skriver vel den session, når folk logger ind.. Hvis så deres brugernavn er admin, skriver du også min session-var.

Hvis du ikke forstår det, så kopier din login kode ind her, så kan jeg vise dig hvor du skal skrive det !
Avatar billede nizo Nybegynder
06. marts 2005 - 20:32 #8
Jeg forstaar det ikke... :/
Her min login kode:

<?
    session_start();
  addslashes($username);
  addslashes($passcode);
  $password = md5($passcode);
  require("db.inc");
  $passquery = mysql_query("SELECT password, id FROM profiler WHERE username = '$username'");
  if (!mysql_num_rows($passquery))
  {
    echo "<meta http-equiv=\"refresh\" content=\"0;url=http://www.unpro.dk/v1/index.php\">";
    exit();
  }
  else
  {
  if($row = mysql_fetch_array($passquery))
    {
      $dbpassword = $row["password"];
      $profilid = $row["id"];
    }
  if($dbpassword == $password)
  {
    $login = (true);
  }
  if ($dbpassword != $password)
  {
    echo "Forkert brugernavn eller password!!!<br>";
    echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>";
    exit();
  }
    session_register(username);
    session_register(password);
    session_register(profilid);
  $today = date("d-m-Y");
  require("db.inc");
  mysql_query("UPDATE profiler set lastlogin = '$today' WHERE username = '$username'");
  header("Location: default.php");
  }
?>
Avatar billede engin10 Nybegynder
06. marts 2005 - 20:36 #9
session_start();
include ('config.php'); // indeholder admin login.

if (isset($_GET["logout"])) //logout
    {
       
        unset($_SESSION["log"]);
        unset($_SESSION["pass"]);
        header("Location: /index.php");
       
    }

if ($_POST['adminuser'] == $adminlog &&  $_POST['adminpassword'] == $adminpass)
        { //login ok
            $_SESSION["log"] = $adminlog;
            $_SESSION["pass"] = $adminpass;
    }

if(isset($_SESSION["log"]) && isset($_SESSION["pass"])){
   
    print('<p align="right"><a href="/index.php">TIL BUTIKKEN</a></p>');
    print('<p align="right"><a href="?logout">LOGOUT</a></p>');
}
Avatar billede baitianlong Nybegynder
06. marts 2005 - 20:42 #10
....
$today = date("d-m-Y");
require("db.inc");
mysql_query("UPDATE profiler set lastlogin = '$today' WHERE username = '$username'");
if($username == "admin") $_SESSION['admin'] == "ok";
header("Location: default.php");
}
?>

Du har et mellemrum inden session_start() øverst, det vil få scriptet til at dø, der må ikke være noget inden.
Avatar billede baitianlong Nybegynder
06. marts 2005 - 20:44 #11
hov... der er lige et = for meget i $_SESSION['admin'] = "ok";
:)
Avatar billede nizo Nybegynder
06. marts 2005 - 20:45 #12
Hmmm.. hvordan ska config.php saa se ud?
Og ka du ikk prøve at ligge dit til min session kode?
Har ret svært ved at forstaa det som det staar der :/
Avatar billede baitianlong Nybegynder
06. marts 2005 - 20:50 #13
hvis du sætter den linie ind som jeg har tilføjet dit script (dog kun med et = der) så er den session registreret med admin, hvis brugeren hed admin.

På alle sider hvor admin kun må komme skriver du så øverst:

<?php
session_start();
if(!isset($_SESSION['admin'])) header("Location: http://www.unpro.dk/v1/index.php");

Så er det løst...
Avatar billede nizo Nybegynder
06. marts 2005 - 21:10 #14
Jeg tror at login scriptet skulle være der nu.. men min session tjek kode virker ikke :\
Den ser saadan ud:

<?
    session_start();
  require("db_ind.inc");
  if(!isset($_SESSION['Nico']))  header("Location: http://www.unpro.dk/v1/index.php");
  $passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'");
      exit();
    }
  else
    {
      $row = mysql_fetch_array($passquery);
      $dbpassword = $row["password"];
      if($dbpassword == $password)
        {
          $login = (true);
        }
      if ($dbpassword != $password)
        {
          echo "Forkert brugernavn eller password!!!<br>";
          echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>";
          exit();
        }
    }
?>
Hej :P


Jeg faar fejlen:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/html/login/admintest.php on line 10
Forkert brugernavn eller password!!!
Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker her.
Avatar billede nizo Nybegynder
06. marts 2005 - 21:11 #15
Nej vendt!
fejlen er: Parse error: parse error, unexpected '}' in /var/www/html/login/admintest.php on line 7

og ikke den anden :P
Avatar billede baitianlong Nybegynder
06. marts 2005 - 21:14 #16
jamen kig på koden og fejlen !

den } i linie 7, hvor er den { der passer til ???
Avatar billede nizo Nybegynder
06. marts 2005 - 21:17 #17
Jeg prøvede at sætte den men saa kom den første fejl jeg skrev :/
Avatar billede nizo Nybegynder
06. marts 2005 - 21:25 #18
Til login scriptet, fik jeg engang af vide jeg skulle bruge session_register(admin); men  er det andet det samme?
Avatar billede baitianlong Nybegynder
06. marts 2005 - 21:27 #19
Hvis der er logget ind når man kommer hertil, hvorfor har du så alt det samme login/database kode her?? Prøv lige at læse mine 3 sidste kommentarer, der har du alt hvad du skal bruge. Det er 4-5 linier det drejer sig om. Brugeren skal vel ikke logges på igen på hver side, eller hva' ??
Avatar billede nizo Nybegynder
06. marts 2005 - 21:32 #20
Okay vi starter med login koden som den ser ud nu:

<?
    session_start();
  addslashes($username);
  addslashes($passcode);
  $password = md5($passcode);
  require("db.inc");
  $passquery = mysql_query("SELECT password, id FROM profiler WHERE username = '$username'");
  if (!mysql_num_rows($passquery))
  {
    echo "<meta http-equiv=\"refresh\" content=\"0;url=http://www.unpro.dk/v1/index.php\">";
    exit();
  }
  else
  {
  if($row = mysql_fetch_array($passquery))
    {
      $dbpassword = $row["password"];
      $profilid = $row["id"];
    }
  if($dbpassword == $password)
  {
    $login = (true);
  }
  if ($dbpassword != $password)
  {
    echo "Forkert brugernavn eller password!!!<br>";
    echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>";
    exit();
  }
    session_register(username);
    session_register(password);
    session_register(profilid);
$today = date("d-m-Y");
require("db.inc");
mysql_query("UPDATE profiler set lastlogin = '$today' WHERE username = '$username'");
if($username == "Admin") $_SESSION['Admin'] = "ok";
header("Location: default.php");
}
?>
Avatar billede baitianlong Nybegynder
06. marts 2005 - 21:32 #21
session_register() er forældet. Tidligere skulle man f.eks:

$admin = "ok";
session_register("admin");

Nu skriver man bare:

$SESSION['admin'] = "ok";

Det giver samme resultat, man skal bare huske selv at skrive session_start();
Avatar billede baitianlong Nybegynder
06. marts 2005 - 21:33 #22
Nu skriver man bare:

$_SESSION['admin'] = "ok";

Jeg manglede lige en _
Avatar billede nizo Nybegynder
06. marts 2005 - 21:34 #23
Min session kode der tjekker om man er logget ind (den med fejlen)

<?
    session_start();
  require("db.inc");
  if(!isset($_SESSION['Admin']))  header("Location: http://www.unpro.dk/v1/index.php");
  $passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'");
      exit();
    }
  else
    {
      $row = mysql_fetch_array($passquery);
      $dbpassword = $row["password"];
      if($dbpassword == $password)
        {
          $login = (true);
        }
      if ($dbpassword != $password)
        {
          echo "Forkert brugernavn eller password!!!<br>";
          echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>";
          exit();
        }
    }
?>
Avatar billede nizo Nybegynder
06. marts 2005 - 21:35 #24
Og min normale session kode for alle andre bruger (virker fint)

<?
    session_start();
  require("db.inc");
  $passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'");
  if (!mysql_num_rows($passquery))
    {
      header ("location: http://unpro.dk/v1/");
      echo "Du skal logge ind for at se siden, eller også er passwordet forkert<p>";
      exit();
    }
  else
    {
      $row = mysql_fetch_array($passquery);
      $dbpassword = $row["password"];
      if($dbpassword == $password)
        {
          $login = (true);
        }
      if ($dbpassword != $password)
        {
          echo "Forkert brugernavn eller password!!!<br>";
          echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>";
          exit();
        }
    }
?>
Avatar billede nizo Nybegynder
06. marts 2005 - 21:36 #25
Hva ska jeg gøre?
Avatar billede nizo Nybegynder
06. marts 2005 - 21:39 #26
Den logger egentlig ikk en ind flere gange, den tjekker jo blot om man er logget ind..
Har du en anden maade at gøre det paa?
Avatar billede nizo Nybegynder
06. marts 2005 - 21:59 #27
Hva vil du mene jeg skal gøre???
Avatar billede baitianlong Nybegynder
06. marts 2005 - 22:04 #28
Din kode er ikke just smuk, sorry :)

Jeg ville skrive det samme sådan her:

<?
session_start();
require("db.inc");
$passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'");
if (!mysql_num_rows($passquery)) header("Location: http://unpro.dk/v1/");
else {
  $row = mysql_fetch_assoc($passquery);
  $dbpassword = $row["password"];
  if($dbpassword == $password) {
    $login = (true); //hvad skal det betyde ?
    if($
  else {
    echo "Forkert brugernavn eller password!!!<br>";
    echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>";
  }
}
?>

når du har sendt den header i linie 7 sker der ikke mere her, så din echo, exit m.v. er ligegyldige. Men det helt store spørgsmål er: Hvor kommer $username og $password fra ?
Avatar billede nizo Nybegynder
06. marts 2005 - 22:07 #29
Din kode viser bare:
Parse error: parse error, unexpected T_ELSE, expecting T_VARIABLE or '$' in /var/www/html/login/admintest.php on line 13
Avatar billede nizo Nybegynder
06. marts 2005 - 22:12 #30
Du har skrevet:
....
$login = (true);
    if($ //hva er det?
  else {
    echo "Forkert brugernavn eller password!!!<br>";
...
Avatar billede nizo Nybegynder
06. marts 2005 - 22:19 #31
Hva ska jeg saa gøre nu?
Hjælp..!
Avatar billede baitianlong Nybegynder
06. marts 2005 - 22:19 #32
Den var ikke lige planlagt :) Beklager

<?
session_start();
require("db.inc");
$passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'");
if (!mysql_num_rows($passquery)) header("Location: http://unpro.dk/v1/");
else {
  $row = mysql_fetch_assoc($passquery);
  $dbpassword = $row["password"];
  if($dbpassword == $password) {
    $login = (true); //hvad skal det betyde ?
  else {
    echo "Forkert brugernavn eller password!!!<br>";
    echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>";
  }
}
?>

Det jeg mener med 'hvad skal det betyde' er at den ikke bliver brugt til noget, $login
Avatar billede baitianlong Nybegynder
06. marts 2005 - 22:21 #33
og som jeg skrev før er der ingen tegn på hvor $username og $password kommer fra
Avatar billede nizo Nybegynder
06. marts 2005 - 22:23 #34
Parse error: parse error, unexpected T_ELSE in /var/www/html/login/admintest.php on line 12


:/
arghh.. hjælp..!
Avatar billede baitianlong Nybegynder
06. marts 2005 - 22:28 #35
jeps

lige en } før else :D
Avatar billede nizo Nybegynder
07. marts 2005 - 07:29 #36
Jaahh..

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 3

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 3

:'(
Avatar billede nizo Nybegynder
07. marts 2005 - 07:31 #37
Og hvis man gaar der ind uden at logge ind kommer der en extra fejl

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 6

hjælp! hva ska jeg gøre?!?!
Avatar billede baitianlong Nybegynder
07. marts 2005 - 20:50 #38
fjern det mellemrum inden session_start() ! Det skal stå først, uden noget som helst foran (ja bortset fra <?php)
Avatar billede nizo Nybegynder
08. marts 2005 - 12:39 #39
Der sker bare ingen ting bortset fra fejlen..

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 2

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 2
Avatar billede baitianlong Nybegynder
08. marts 2005 - 17:26 #40
der er stadig et mellemrum foran, ellers ville den ikke sige det der.
Avatar billede nizo Nybegynder
08. marts 2005 - 17:45 #41
Ja.. Nu kommer det ingen fejl..
Men det er saa bare lige saadan at nu er alle bruger admin.. eller alle har hverfald adgang til siden..
:/
Hva ska jeg saa gøre nu?
Avatar billede nizo Nybegynder
08. marts 2005 - 18:04 #42
Jeg tror sessionen bliver sat ved login.. (altsaa admin session'en)
Men hvordan faar jeg den til at hente oplysnigerne med en session kode?
Den her
<? session_start();
require("db_ind.inc");
$passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'");
if (!mysql_num_rows($passquery)) header("Location: http://unpro.dk/v1/");
else {
  $row = mysql_fetch_assoc($passquery);
  $dbpassword = $row["password"];
  if($dbpassword == $password) {
    $login = (true); //hvad skal det betyde ?
} else {
    echo "Forkert brugernavn eller password!!!<br>";
    echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>";
  }
}
?>

Er jo bare en anden løsning paa sessions kode..
Men hva med admin session koden??
Avatar billede baitianlong Nybegynder
08. marts 2005 - 18:19 #43
Det skrev jeg jo tidligere:

if(!isset($_SESSION['Admin']))  header("Location: http://www.unpro.dk/v1/index.php");
Avatar billede nizo Nybegynder
08. marts 2005 - 19:11 #44
Nu virker det!!
Tak, mange tak for hjælpen!!!
Men en sidste ting..
Er der en metode saa man ka vise nogle ting paa forsiden kun for admin'en, som andre ikke ka se?
Ex. en link til adminpanelet (ligesom phpBB)??
Avatar billede nizo Nybegynder
08. marts 2005 - 19:38 #45
Har fundet ud af det selv..
Tak for svarene!!
Avatar billede baitianlong Nybegynder
08. marts 2005 - 19:47 #46
du kan jo gøre hvad du vil for admin eller andre. Den session cookie bliver liggende indtil browseren lukkes:

<?php
if($_SESSION['Admin']) print("<script>\nalert('Hej Admin!');\n</script>\n");
?>

:)
Avatar billede nizo Nybegynder
09. marts 2005 - 06:49 #47
Ja det var saadan jeg gjorde :o)
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