Avatar billede jkn83 Praktikant
04. januar 2005 - 19:52 Der er 29 kommentarer og
1 løsning

Hvis bruger er logget ind, kan han se siden, men!

Jeg har lavet et brugersystem efter en tutorial jeg fandt, omskrevet den lidt til eget brug, men... Et brugersystem er jo ikke noget ved hvis man ikke kan sætte en blokade på en side for folk der ikke er logget ind...

Lad os sige jeg laver en side for brugere af min site, den side må kun vises til de folk der er logget ind. Så den skal tjekke min mysql database om brugeren er logget ind, og så lade personen se siden...

Noden ideer ?
Avatar billede petan Nybegynder
04. januar 2005 - 19:59 #1
Jeg ville nok lave en session når personen logger ind.
Avatar billede petan Nybegynder
04. januar 2005 - 20:05 #2
noget ala:

når personen logger ind:
$_SESSION['logind'] = true

den beskyttede side:
if (!$_SESSION['logind'] == true)
{
  header("location: http://www.en-anden-side.php")
}
Avatar billede jkn83 Praktikant
04. januar 2005 - 20:10 #3
ja men hvis du så logger ind, går ind på den beskyttede side, altså som bliver sat ind via header, ville man så ikke kunne få adressen på den side i headeren ved et højre klik - properties ?
Avatar billede petan Nybegynder
04. januar 2005 - 20:12 #4
jo, adressen, men du bliver sendt videre til en anden side så længe du ikke er logget ind via sessions, så det er ligemeget om man kender adressen.
Avatar billede klep2manen Nybegynder
04. januar 2005 - 20:18 #5
Lidt ligesom det petan har lavet:

if (!$_SESSION['logind'] == true) {
//indhold på den hemmelige side ;)
} else {
echo "Du skal være logget ind for at se siden";
}
Avatar billede petan Nybegynder
04. januar 2005 - 20:18 #6
Husk du bliver sendt til denne side hvis du IKKE er logget ind:
header("location: http://www.en-anden-side.php")
ikke hvis du er logget ind!
Avatar billede jkn83 Praktikant
04. januar 2005 - 20:24 #7
hmm, er lidt forvirret, jeg legede lidt med noget alla jeres ideer her... Ehm, her er hvad jeg selv lige kom op med, ikke noget der er testet, men noget jeg lige vil have feedback på... finder lige noget af koderne, så i kan følge med...

Her er min ide omkring det hvert fald:

<?
session_start(); 

include 'db.php';

$username = $_POST['username'];
$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND activated='1'");
$login_check = mysql_num_rows($sql);

if($login_check > 0)
{
  header("location: http://www.en-anden-side.php")
}
else{
echo "You need to login to see this page! <br />";
include 'login_form.html';
}

?>
Avatar billede petan Nybegynder
04. januar 2005 - 20:31 #8
ja, det ser rigtigt ud, men du mangler vel at tjekke brugerens kode.
Avatar billede klep2manen Nybegynder
04. januar 2005 - 20:32 #9
Det ser da meget fornuftigt ud...
Men jeg håber dit system er lidt mere sikkert end bare et brugernavn. Og hvis der skal være flere sider skal du også ud i noget med session
Avatar billede petan Nybegynder
04. januar 2005 - 20:32 #10
og husk at activated='1' betyder at du behandler 1 som en streng og ikke som et tal!
Avatar billede petan Nybegynder
04. januar 2005 - 20:33 #11
ja, altså siden er jo ikke mere beskyttet end alle kan tilgå den når du ikke bruger sessions! Hvis google finder siden, eller en anden får URL´en kan man jo uden videre komme ind på den.
Avatar billede jkn83 Praktikant
04. januar 2005 - 20:34 #12
Man starter med at logge ind via en html form, som smider infoen ind i en checkuser.php fil der kan ses neden under. Når man så er logget ind vil jeg gerne have at man kan gå ind på en side, beskyttet side altså, og på den side, skal den tjekke om man er logget på inden den viser indholdet... Hvis man ikke er logget ind, får man beskeden om at logge ind før man fortsætter...

checkuser.php koden...

<?
session_start(); 

include 'db.php';

$username = $_POST['username'];
$password = $_POST['password'];

if((!$username) || (!$password)){
    echo "Please enter ALL of the information! <br />";
    include 'login_form.html';
    exit();
}

$password = md5($password);

$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'");
$login_check = mysql_num_rows($sql);

if($login_check > 0){
    while($row = mysql_fetch_array($sql)){
    foreach( $row AS $key => $val ){
        $$key = stripslashes( $val );
    }
       
        session_register('first_name');
        $_SESSION['first_name'] = $first_name;
        session_register('last_name');
        $_SESSION['last_name'] = $last_name;
        session_register('email_address');
        $_SESSION['email_address'] = $email_address;
        session_register('special_user');
        $_SESSION['user_level'] = $user_level;
       
        mysql_query("UPDATE users SET last_login=now() WHERE userid='$userid'");
       
        header("Location: login_success.php");
    }
} else {
    echo "You could not be logged in! Either the username and password do not match or you have not validated your membership!<br />
    Please try again!<br />";
    include 'login_form.html';
}
?>

Ja som i kan se tog jeg noget af den kode ud og brugte den til en beskyttet side... Sådan jeg mener det vil virke, men er jo n00b til php :D
Avatar billede petan Nybegynder
04. januar 2005 - 20:35 #13
logind side:
if($login_check > 0)
{
  $_SESSION['logind'] = true;
  header("location: http://www.en-anden-side.php");
}

http://www.en-anden-side.php:
if (!$_SESSION['logind'] == true)
{
  header("location: http://www.væk fra denne side")
}
Avatar billede jkn83 Praktikant
04. januar 2005 - 20:37 #14
hmm... Ja det er jo det der er problemmet... Man skal ikke se siden hvis man ikke er logget ind... Vil have en sikker side, hvor man skal være registreret for at... eksempelvis hente nogle filer vi laver til vores brugere!

Så hvis man ikke er registreret skal man ikke have adgang til filerne...
Avatar billede klep2manen Nybegynder
04. januar 2005 - 20:38 #15
Ser helt fint ud, men ville også lige lave en if $_SESSION['logind'] eller et andet navn.
Så kan du bare tilføje det her på alle sider der kræver at man er logget ind:

if (!$_SESSION['logind'] == true) {
//indhold på den hemmelige side ;)
} else {
echo "Du skal være logget ind for at se siden";
}
Avatar billede petan Nybegynder
04. januar 2005 - 20:40 #16
Det kan man heller ikke hvis du bruger mit sidste forslag.

Derudover skal der selvfølgelig være en database forespørgsel hvor du laver noget ala:
$rs = "select * from TABEL WHERE brugernavn='$user' AND kode='$kode'"
Avatar billede petan Nybegynder
04. januar 2005 - 20:40 #17
Her er et svar såfremt du kan bruge mit input.
Avatar billede jkn83 Praktikant
04. januar 2005 - 20:41 #18
jamen den linie i bruger der: "(!$_SESSION['logind'] == true)"
logind, er det navnet på den session ? Og hvordan "opretter" jeg det navn så jeg kan bruge det... Det skal vel være på checkuser siden når de logger ind ?
Avatar billede petan Nybegynder
04. januar 2005 - 20:46 #19
lav en forespørgsel i databasen og find det antal brugere som har det indtastede brugernavn og kode(enten en eller nul). Hvis der er nul sættes $_SESSION['logind']=false;

ellers sættes den til true.
Avatar billede petan Nybegynder
04. januar 2005 - 20:48 #20
og ja, logind er navnet på den session der anvendes. Den kunne lige så godt hedde alt muligt andet.
Avatar billede jkn83 Praktikant
04. januar 2005 - 20:50 #21
hehe petan, du skal nok få point :) tror vist du har fortjent dem... men kan du ikke skære det ud i pap for mig... længere oppe pastede jeg koden fra den side hvor useren bliver tjekket når de logger ind, om user og pass matcher i databasen... I den kode skal jeg have added:

if($login_check > 0)
{
  $_SESSION['logind'] = true;
  header("location: http://www.en-anden-side.php");
}

http://www.en-anden-side.php:

eller hvordan ???
Avatar billede petan Nybegynder
04. januar 2005 - 20:55 #22
hvis du bruger ovenstående har du jo ikke nogen sikkerhed, medmindre du også tjekker på den side du sender vedkommende videre til! Ellers ja, så kan det bruges.
Avatar billede petan Nybegynder
04. januar 2005 - 20:56 #23
Den hemmelige side:

Tjek om $_session = true.

Hvis ikke true, send vedkommende væk, hvis true, gør ikke noget.
Avatar billede petan Nybegynder
04. januar 2005 - 20:57 #24
Det kan laves på mange forskellige måder, det vigtigste er bare at du laver det således at en bruger ikke kan opholde sig på en hemmeligt side medmindre hans session['etellerander'] er true.
Avatar billede jkn83 Praktikant
04. januar 2005 - 20:58 #25
tror ikke helt jeg forstår det, men det hjalp mig nok lidt på vej mod min ende... tak for det petan...
Avatar billede petan Nybegynder
04. januar 2005 - 21:00 #26
Det var så lidt.
Avatar billede jkn83 Praktikant
04. januar 2005 - 21:06 #27
havde bare måske håbet lidt på... en forklaring omkring hvordan jeg får det til at virke...

if($login_check > 0)
{
  $_SESSION['logind'] = true;
  header("location: http://login_først_side?_eller_beskyttet_side?.php");
}

og hvis $_SESSION['logind'] kan have hvilket som helst navn, så skal det jo også "oprettes" et sted, hvor og hvordan ? Jeg mener... Skal jeg adde det i usercheck.php koden, eller skal det addes et andet sted...
Avatar billede petan Nybegynder
04. januar 2005 - 21:09 #28
Tror vi kører lidt i ring nu...

Din session sætter du bare når du har undersøgt om vedkommende findes i databasen:
if($login_check > 0)
{
  $_SESSION['logind'] = true;
}
Avatar billede petan Nybegynder
04. januar 2005 - 21:11 #29
På den hemmelige side:
if(!$login_check > 0)
{
  echo "Du er ikke logget ind";
}
else
{
  echo "her er det hemmelige";
}
Avatar billede jkn83 Praktikant
04. januar 2005 - 21:16 #30
så $_SESSION['logind'] = true; kan tilføjes under de andre i checuser.php koden ? altså her under:

if($login_check > 0){
    while($row = mysql_fetch_array($sql)){
    foreach( $row AS $key => $val ){
        $$key = stripslashes( $val );
    }
       
        session_register('first_name');
        $_SESSION['first_name'] = $first_name;
        session_register('last_name');
        $_SESSION['last_name'] = $last_name;
        session_register('email_address');
        $_SESSION['email_address'] = $email_address;
        session_register('special_user');
        $_SESSION['user_level'] = $user_level;

Eller skal den have sit HELT eget, bare for at være sikker :D
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