Avatar billede impulze Nybegynder
28. november 2005 - 15:46 Der er 30 kommentarer og
1 løsning

Kontrol med session

Har en brugersystem, hvor man kan oprette bruger (sjovt nok) og kan komme ind på nogle andre sider, hvis man kun er logget ind. Hvor ellers en der ikke er logget ind og prøver på at gå ind på en side, skal der være en session der siger man ikke har adgang og skal derfor logge ind.

Men selve den session ved jeg ikke rigtig hvordan det laves når det er flere bruger, da jeg har kun en session til en enkel bruger, som jeg har brugt tidens løb.

Det jeg har på de sider, hvor den laver en kontrol starter sådan:
<?php
session_start();
if (isset($_SESSION['laccess'])){
    header("Location: index.php?f=needlogin");
}
?>

Hvor på¨den index.php side står:
<?php
if (isset($_GET['f']) && $_GET['f'] == 'wronglogin') {
    echo '<br><br><span style="color: red; font-weight: bold">De indtastede oplysninger er ikke korrekte!</span>';
} else if (isset($_GET['f']) && $_GET['f'] == 'needlogin') {
    echo '<br><br><span style="color: red; font-weight: bold">Adgang nægtet til den pågældende side!</span>';
} else if (isset($_GET['f']) && $_GET['f'] == 'loggedout') {
    unset($_SESSION['laccess']);
    echo '<br><br><span style="color: #008000; font-weight: bold">Du er nu logget ud!</span>';
}
?>

Håber det er til at forstå, ellers spørg :)
Avatar billede jakobdo Ekspert
28. november 2005 - 18:05 #1
Dine kode ser som sådan fornuftig ud.
Søger du selve login scriptet?
Eller hvad er det du søger?
Jeg forstår dig desværre ikke helt! :o)
Avatar billede impulze Nybegynder
28. november 2005 - 19:55 #2
Okay... nej søger ikke lige login scripet for det har jeg :) Men selve den script der laver en kontrol om du (lige den bruger du er logget ind med) har adgang eller ej på gældende siderbdu vil have beskyttelse på.

Bedre? :p
Avatar billede jakobdo Ekspert
28. november 2005 - 19:58 #3
Hvor mange levels vil du have?
brugere, admin, ???
Avatar billede impulze Nybegynder
28. november 2005 - 20:22 #4
har tænkt mig 3 levels som admin, "power bruger" og alm. bruger
Avatar billede jakobdo Ekspert
28. november 2005 - 20:39 #5
Ok, så kunne du lave følgende, når brugeren logger ind:
$brugernavn = mysql_real_escape_string($_POST['brugernavn']);
$kodeord = mysql_real_escape_string($_POST['kodeord']);
SELECT level FROM brugere WHERE brugernavn = $brugernavn AND kodeord = $kodeord LIMIT 1

Hvis du så finder brugeren med det rigtige brugernavn og kodeord, så har du hans level! (som du jo lige har tilføjet som felt) :o)

Så indlæser du det i:
$_SESSION['level'] = $row['level'];

Og på dine test sider:

almindelig bruger = 1
powerbruger = 2
admin = 3
if($_SESSION['level'] < 2)
{
header("Location: index.php?f=needlogin");
exit();
}
//Er brugeren her, så har er han powerbruger eller admin.
Avatar billede impulze Nybegynder
28. november 2005 - 21:22 #6
Hm ja nok mig der ikke lige fatter det hehe.

Når man logger ind fra index siden, så læser den fra denne godkend.php, som ser sådan ud lige nu, hvilken der giver fejl:

<?php
session_start();
mysql_connect("localhost","******","******");
mysql_select_db("******");
$query = mysql_query("SELECT level FROM film_community WHERE brugernavn = $brugernavn AND kodeord = $kodeord LIMIT 1");
if (mysql_num_rows($query) == 0){
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Movie - Rewies - Guide - Fun</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../css.css">
</head>
<body>

<div id="menutop">
<?php include("../include/menutop.php"); ?>
</div>

<div id="headmain">
<center>

<h1>Forkerte oplysninger!</h1>
De indtastede oplysninger stemmer ikke overens. Prøv igen eller opret dig som medlem.
</center>

<?
} else {
    $r = mysql_fetch_array($query);
    $brugernavn = mysql_real_escape_string($_POST['brugernavn']);
    $kodeord = mysql_real_escape_string($_POST['kodeord']);
    header ("location: brugerside.php");
}
?>
</div>

<div id="menubar">
test
</div>

<div id="menuleft">
<?php include("../include/menuleft.php"); ?>
</div>

<div id="menubottom">
<?php include("../include/menubottom.php"); ?>
</div>

</body>
</html>
Avatar billede jakobdo Ekspert
28. november 2005 - 21:26 #7
I denne kode:
<?
} else {
    $r = mysql_fetch_array($query);
$_SESSION['level'] = $r['level'];
    header ("location: brugerside.php");
exit();
}
?>
</div>
Avatar billede impulze Nybegynder
28. november 2005 - 21:28 #8
Kommer op med denne fejl:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resour
Avatar billede jakobdo Ekspert
28. november 2005 - 21:30 #9
What?
Det er i denne sql:
$query = mysql_query("SELECT level FROM film_community WHERE brugernavn = $brugernavn AND kodeord = $kodeord LIMIT 1");

Prøv at ret den til:
$query = mysql_query("SELECT level FROM film_community WHERE brugernavn = $brugernavn AND kodeord = $kodeord LIMIT 1") or die(mysql_error());
Avatar billede impulze Nybegynder
28. november 2005 - 21:36 #10
8-O Hmm, nok mig der har lavet noget forkert så det ikke passer sammen... kommer stadig fejl op. må finde en anden måde at lave det på, da det her kommer nok til at tage for lang tid...
Avatar billede jakobdo Ekspert
28. november 2005 - 21:41 #11
Det tager altså ikke for lang tid, du skal bare lige forstå hele sammenhængen, så er det altså næsten som din kode før, blot en lille ændring.
Avatar billede impulze Nybegynder
28. november 2005 - 21:42 #12
okay, er der noget jeg skal vise frem så det er bedre at forstå for dig, at hvordan jeg har lavet det?
Avatar billede jakobdo Ekspert
28. november 2005 - 21:44 #13
Lige nu snakker vi bare login ikke? og hvordan vi får sat level i en session?
Avatar billede impulze Nybegynder
28. november 2005 - 21:45 #14
Jo det gør vi :)
Avatar billede jakobdo Ekspert
28. november 2005 - 21:46 #15
Ok, så burde der altså ikke være så meget mere i det end det jeg rettede før!
Gider det slet ikke mening det jeg skriver til dig? :o)
Avatar billede impulze Nybegynder
28. november 2005 - 21:52 #16
Hehe nej ikke rigtig, kan ikke rigtig se mening bag det, nok fordi jeg normal har lavet session til en bruger bl.a. til nyheder. Første gang jeg bruger med flere bruger og nu level.

den kommer op med fejl med at det ikke kan lad sig gøre og kan ikke lige se hvad fejlen skulle være.
Avatar billede jakobdo Ekspert
28. november 2005 - 21:55 #17
Vi må kigge på det i morgen, mit hoved er træt nu!
Avatar billede impulze Nybegynder
28. november 2005 - 22:00 #18
okay det er iorden, har også drukket for meget kaffe nu ;)

Men nu virker det, eller nu kan jeg overhovede ikke komme ind, lige meget om jeg er admin eller alm. bruger.
Nu kommer den bare op med "Adgang nægtet til den pågældende side" når man prøver.


Den ser sådan ud nu i godkend.php, hvor den går tilbage til index siden og skriver det "Adgang nægtet..." som den skal hvis man ikke har adgang.

<?php
session_start();
mysql_connect("localhost","******","******");
mysql_select_db("******");
$query = mysql_query("SELECT level FROM film_community WHERE brugernavn='$_POST[brugernavn]' AND kodeord='$_POST[kodeord]' LIMIT 1") or die(mysql_error());
if (mysql_num_rows($query) == 0){
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Movie - Rewies - Guide - Fun</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../css.css">
</head>
<body>

<div id="menutop">
<?php include("../include/menutop.php"); ?>
</div>

<div id="headmain">
<center>

<h1>Forkerte oplysninger!</h1>
De indtastede oplysninger stemmer ikke overens. Prøv igen eller opret dig som medlem.
</center>

<?php
} else {
        $r = mysql_fetch_array($query);
    $_SESSION['level'] = $r['level'];
    header ("location: brugerside.php");
exit();
}
?>
</div>

<div id="menubar">
test
</div>

<div id="menuleft">
<?php include("../include/menuleft.php"); ?>
</div>

<div id="menubottom">
<?php include("../include/menubottom.php"); ?>
</div>

</body>
</html>
Avatar billede jakobdo Ekspert
29. november 2005 - 20:16 #19
Med den kode herover, der sætter vi $_SESSION['level'] til brugerens level, som hentes fra databasen. Har du husket at give dig selv en level på 3, som er ADMIN?

Husker du så at rette dit kontrol script til:

<?
session_start();
if($_SESSION['level'] < 1)
{
echo "Du er ikke engang bruger";
}
?>

<?
session_start();
if($_SESSION['level'] < 2)
{
echo "Du er ikke super bruger";
}
?>

<?
session_start();
if($_SESSION['level'] < 3)
{
echo "Du er ikke admin";
}
?>

og sådan kan du tjekke de forskellige levels!
Avatar billede impulze Nybegynder
30. november 2005 - 17:21 #20
Hej, ja undskyld jeg ikke kom på i går men arbejdet kom til at være noget længere end jeg regnet med :)

Skal lige helt være med, det  $_SESSION['level'] som der står i godkend.php er som det skal være, eller?
Avatar billede impulze Nybegynder
30. november 2005 - 18:46 #21
Nå jakobdo, så har jeg rettet det lidt på login siden og godkend filen sådan det skal være.

Dog virker session med level ikke og selve log ind siden.
Forklaret på denne måde når jeg logger ind med min test-bruger (med level 1 som standart) så viser den info fra min admin-bruger (som har level 3). Altså kan logge ind på de forskellige bruger med dens kode, men det er en helt anden bruger info der vises, som er "rigtig navn" og "bruger navn".
Ja så gider den heller ikke logge en bruger af, med at slette det session som er oprettet ved login.

Kan vise dig login siden og godkend filen (som jeg har rettet helt om).



Her logger jeg ind (Som er index i mappen):

<table cellpadding="4" cellspacing="0" style="border: 1px solid #AAAAAA">
<tr><form method="post" action="godkend.php">
<td width="100%" bgcolor="#E3E3E3" colspan="2"><b>Log ind-oplysninger</b></td>
</tr><tr>
<td width="100%" colspan="2" bgcolor="#AAAAAA"></td>
</tr><tr>
<td width="160" bgcolor="#F3F3F3"><font color="darkred">Brugernavn</font><br><input type="text" name="brugernavn"></td>
<td width="136" bgcolor="#F3F3F3"><font color="darkred">Kodeord</font><br><input type="password" name="kodeord"></td>
</tr><tr>
<td width="100%" colspan="2" bgcolor="#AAAAAA"></td>
</tr><tr>
<td width="160" bgcolor="#F3F3F3"><a href='opret.php'>Opret bruger</a></td>
<td width="136" align="right" bgcolor="#F3F3F3"><input type="submit" value="Log ind"></td>
</tr></form>
</table>
<br />

<?php
if (isset($_GET['f']) && $_GET['f'] == 'wronglogin') {
    echo '<br><br><span style="color: red; font-weight: bold">De indtastede oplysninger er ikke korrekte!</span>';
} else if (isset($_GET['f']) && $_GET['f'] == 'needlogin') {
    echo '<br><br><span style="color: red; font-weight: bold">Adgang nægtet til den pågældende side!</span>';
} else if (isset($_GET['f']) && $_GET['f'] == 'poweruseraccess') {
    echo '<br><br><span style="color: red; font-weight: bold">Din bruger er ikke Super Bruger (PowerUser) derfor ikke adgang til den pågældende side!</span>';
} else if (isset($_GET['f']) && $_GET['f'] == 'adminaccess') {
    echo '<br><br><span style="color: red; font-weight: bold">Din bruger er ikke admin og derfor ikke adgang til den pågældende side!</span>';
} else if (isset($_GET['f']) && $_GET['f'] == 'loggedout') {
    unset($_SESSION['brugernavn']);
    unset($_SESSION['navn']);
    unset($_SESSION['level']);
    echo '<br><br><span style="color: #008000; font-weight: bold">Du er nu logget ud!</span>';
}
?>



Her er godkend filen (hvor index siden bruger som action):

<?php
session_start();
mysql_connect("localhost","database","koden");
mysql_select_db("database");
$query = mysql_query("SELECT level FROM film_community WHERE brugernavn='$_POST[brugernavn]' AND kodeord='$_POST[kodeord]' LIMIT 1") or die(mysql_error());
if (mysql_num_rows($query) == 0){

    header ("location: index.php?f=wronglogin");

} else {
        $r = mysql_fetch_array($query);
    $_SESSION['brugernavn'] = $_POST['brugernavn'];
    $_SESSION['kodeord'] = $_POST['kodeord'];
    $_SESSION['level'] = $r['level'];
    header ("location: brugerside.php");
exit();
}
?>
Avatar billede impulze Nybegynder
30. november 2005 - 18:53 #22
Lige lidt mere hjælp, som nok kunne være godt at se hvordan jeg har min database i mysql:

CREATE TABLE `film_community` (
  `id` int(11) NOT NULL auto_increment,
  `brugernavn` tinytext NOT NULL,
  `kodeord` tinytext NOT NULL,
  `navn` tinytext NOT NULL,
  `mail` tinytext NOT NULL,
  `msn` tinytext NOT NULL,
  `beskrivelse` longtext NOT NULL,
  `hjemmeside` tinytext NOT NULL,
  `icq` int(11) NOT NULL default '0',
  `level` tinyint(4) NOT NULL default '1',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=6 ;

Håber det giver lidt mere overpligt over mit problem :)

Synes du har gjort et stort hjælp og, hvis det kommer til at virke og hvis du vil rette det med ”log out” på den måde det skal gøres. Så kan jeg jo oprette en ny spørgsmål (lovligt) med hen pligt på log out og kan give ekstra 30 point, eller? :)
Avatar billede impulze Nybegynder
02. december 2005 - 12:21 #23
Hmm der er måske ikke mere at komme efter her?
Avatar billede impulze Nybegynder
03. december 2005 - 15:03 #24
Hvor længe skal man vente?
Avatar billede jakobdo Ekspert
04. december 2005 - 16:34 #25
Har du forsøgt selv?
Avatar billede impulze Nybegynder
06. december 2005 - 13:33 #26
ja har prøvet at rette det til, men mangler en der vil guide mig igennem, hvor min fejl ligger med at man kan logge på med forskellige bruger på session.
Der for jeg har opgivet det "hele" for du måske kunne se hvad jeg har gjort forkert?

Undskyld hvis jeg virkede sur og det, man kan jo ikke have tid være gang. :)
Avatar billede jakobdo Ekspert
06. december 2005 - 13:41 #27
Det er ok!
Det er ikke altid jeg heller lige er i humør til at sige: Værsgo min lille ven, her har jeg kodet hele dit projekt færdigt! :o)
Avatar billede impulze Nybegynder
06. december 2005 - 15:57 #28
Hehe nej, forstår dig skam godt. Nu har jeg heller ikke været hjemme i noget tid, så tager lige en kig på det igen, hvis nu der er noget jeg kan.Hvis ikke, så håber jeg at jeg kan stadig få lidt hjælp?
Hvis du vil så kan du godt få point for det gode stykke arbejde du har givet mig og brugt tid på mig :p
Avatar billede jakobdo Ekspert
06. december 2005 - 16:02 #29
Det bestemmer du selv...
Men ellers vender du bare tilbage, så skal jeg tage stilling om jeg gider hjælpe dig igen! :o)
Avatar billede impulze Nybegynder
06. december 2005 - 17:19 #30
Okay lyder godt :) Men her er de :)
Avatar billede jakobdo Ekspert
06. december 2005 - 17:24 #31
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