Avatar billede clausberg Nybegynder
22. juli 2006 - 14:50 Der er 40 kommentarer og
2 løsninger

evolt.org - Login system

Halløj
Jeg har valgt at bruge det login system der findes på:
http://evolt.org/node/60384

Jeg har en række sider, jeg vil have, at brugeren kun kan få adgang til, hvis denne er logget ind. Som det er nu, kan brugeren nå fx siden beskriv.php både når denne er logget ind og ikke er logget ind.

Det skulle gerne være sådan, at hvis man skriver www.blablabla.dk/beskriv.php - og ikke er logget ind - ja, så skal brugeren smides hen til login formularen, som findes på forsiden.

Kan I gennemskue om mit brugte loginscript kan det? Det findes som sagt på:
http://evolt.org/node/60384
Avatar billede clausberg Nybegynder
22. juli 2006 - 14:52 #1
På de sider jeg gerne vil have "beskyttede", har jeg sat:
<?
include("include/session.php");
?>
øverst... men det er tilsyneladende ikke nok?
Avatar billede jaw Nybegynder
22. juli 2006 - 14:56 #2
Nu har jeg ikke kigger hele scriptet igennem, men efter det du allerede har med session.php, så prøv:

if(isset($_SESSION['username']) && !empty($_SESSION['username'])) {
  -- Her skal du have sidens indhold --
} else {
  //sender til forsiden
  header("Location: forside.php");
}
Avatar billede nielle Nybegynder
22. juli 2006 - 14:59 #3
Ia inkludere session.php er ikke nok i sig selv. Den indeholder definition en masse funktioner, bl.a. den du skal bruge:

checkLogin()

- men den kalder dem ikke.
Avatar billede nielle Nybegynder
22. juli 2006 - 15:00 #4
<?
include("include/session.php");
if (!checkLogin())
    echo "Brugeren er ikke logget ind!";
else
    echo "Brugeren er logget ind.";
?>
Avatar billede nielle Nybegynder
22. juli 2006 - 15:05 #5
I stedet for at udskrive at brugeren ikke er logget ind, vil man som regel - som jaw også vælger at gøre - sende dem direkte til logindsiden.
Avatar billede jaw Nybegynder
22. juli 2006 - 15:15 #6
Ja, at udnytte checklogin() vil selvfølgelig være det smarteste...
Avatar billede jakobdo Ekspert
22. juli 2006 - 15:17 #7
I stedet for at gøre som jaw laver i sit indlæg: 22/07-2006 14:56:28

if(!checkLogin())
{
  //sender til forsiden
  header("Location: forside.php");
  exit();
}

og her kommer din side så.
Forskellen er ens, men det er måske lidt lettere at holde styr på, da du ellers ikke har alt din kode inde i en IF() { ...... }
Avatar billede clausberg Nybegynder
22. juli 2006 - 15:22 #8
jeg prøver og prøver.... et øjeblik :-)
Avatar billede clausberg Nybegynder
22. juli 2006 - 15:28 #9
Jaw og Nielle>>>>>>>>>>>
Jeg har prøvet dette:

<?
include("include/session.php");
?>
<html>
<head>
<title>Headssdfskdfl</title>
</head>
<body>
<?
if(isset($_SESSION['username']) && !empty($_SESSION['username'])) {
echo "Her skal stå noget fint";
} else {
  //sender til forsiden
  header("Location: index.php");
}
?>
</body>
</html>

men så får jeg blank skærm
Avatar billede clausberg Nybegynder
22. juli 2006 - 15:29 #10
Jakobdo>>>>>>>>>

Jeg har prøvet dette:
<?
include("include/session.php");
if(!checkLogin())
{
  //sender til forsiden
  header("Location: index.php");
  exit();
}
?>
<html>
<head>
<title>Headssdfskdfl</title>
</head>

<body>
<p>Her skal stå noget fint</p>
</body>
</html>

men jeg får også blank skærm her????
Avatar billede jaw Nybegynder
22. juli 2006 - 15:32 #11
Du må ikke have noget browser output, såsom dine html-tags etc. før du kører linien med header(). Dvs. at den skal aller øverst.
Avatar billede jakobdo Ekspert
22. juli 2006 - 15:33 #12
På siden: http://evolt.org/node/60384
Der er Session.php med stort S, sikker på du har en fil der hedder session.php?
Og blankside skyldes tit en fejl, og så har dit site deaktiveret fejlbeskeder.
Avatar billede jakobdo Ekspert
22. juli 2006 - 15:34 #13
Jaw: Indlæg 22/07-2006 15:29:11 er vel som sådan ok.
der står header ok.
Avatar billede clausberg Nybegynder
22. juli 2006 - 15:42 #14
Jaw>>>>>>
Er det sådan:

<?
include("include/session.php");
if(isset($_SESSION['username']) && !empty($_SESSION['username'])) {
?>
<html>
<head>
<title>Headssdfskdfl</title>
</head>
<body>
<p>Her skal stå noget fint</p>
</body>
<?
} else {
  //sender til forsiden
  header("Location: index.php");
}
?>
</html>

Nu bliver jeg smidt direkte tilbage til forsiden - både når jeg er logget ind og når jeg ikke er. :-)
Avatar billede clausberg Nybegynder
22. juli 2006 - 15:43 #15
Jakobdo>>>>>
Ja, der er en fil med navnet session.php... som ligger i undermappen "include".
Avatar billede nielle Nybegynder
22. juli 2006 - 15:44 #16
22/07-2006 15:29:11 er den rigtige måde. Men koden skal lige rettes lidt:

<?
include("include/session.php");
if(!$session->checkLogin())
{
  //sender til forsiden
  header("Location: index.php");
  exit();
}
?>
<html>
<head>
<title>Headssdfskdfl</title>
</head>

<body>
<p>Her skal stå noget fint</p>
</body>
</html>
Avatar billede clausberg Nybegynder
22. juli 2006 - 15:47 #17
Nielle>>>>>
Hvis jeg bruger det du - 22/07-2006 15:44:16 - foreslog, så får jeg blank skærm.
Avatar billede nielle Nybegynder
22. juli 2006 - 15:51 #18
Prøv at slå udskrift fejlmeddelelser til; prøv de råd som bliver givet her i dette spørgsmål:

http://www.eksperten.dk/spm/721406
Avatar billede nielle Nybegynder
22. juli 2006 - 15:55 #19
Det kan også bare være at du skal øndre:

if(!$session->checkLogin())

- til:

if ($session->checkLogin() === false)

Jeg er dog langt fra sikker på at det gør en forskel.
Avatar billede clausberg Nybegynder
22. juli 2006 - 16:01 #20
Det gjorde desværre ingen forskel.

Jeg har sat fejlmeddelser til, men der går et par minutter før det træder i kraft.
Avatar billede nielle Nybegynder
22. juli 2006 - 16:05 #21
Ok, venter spændt på hvad den egentlig melder :^)
Avatar billede clausberg Nybegynder
22. juli 2006 - 23:43 #22
Der meldes følgende fejl:
Warning: main(include/session.php): failed to open stream: No such file or directory in /customers/fri12.dk/fri12.dk/httpd.www/test.php on line 2

Warning: main(): Failed opening 'include/session.php' for inclusion (include_path='.:/usr/lib/php') in /customers/fri12.dk/fri12.dk/httpd.www/test.php on line 2

Fatal error: Call to a member function on a non-object in /customers/fri12.dk/fri12.dk/httpd.www/test.php on line 3


ved kørsel af:
<?
include("include/session.php");
if(!$session->checkLogin())
{
  //sender til forsiden
  header("Location: index.php");
  exit();
}
?>
<html>
<head>
<title>Headssdfskdfl</title>
</head>

<body>
<p>Her skal stå noget fint</p>
</body>
</html>
Avatar billede nielle Nybegynder
22. juli 2006 - 23:46 #23
Det lyder som om at din "session.php" ikke ligger der hvor du har angivet at den ligger.
Avatar billede clausberg Nybegynder
22. juli 2006 - 23:51 #24
mærkeligt... på min server ligger den som:
Login System v.2.0/include/session.php

Kan det være fejlen at session.php ligger i hovedbibliotektet "Login System v.2.0". Jeg har jo blot downloaded biblioteket fra http://evolt.org/node/60384 og smidt hele biblioteket op på min server.
Avatar billede clausberg Nybegynder
22. juli 2006 - 23:55 #25
jeg har lige oprettet et bibliotek med navnet "include" og smidt session.php ind i det. Det ligger på samme niveau, som det script, det refererer til.

Altså test.php skal ned i "include" for at hente session.php. Så får jeg endnu flere fejlmeddelser
Avatar billede nielle Nybegynder
22. juli 2006 - 23:55 #26
Stien skal være i forhold til din egen fil - test.php i dette tilfælde.

I det bibliotek hvor test.php ligger, skal der være et underbibliotek include, og inden i dette skal session.php så ligge.
Avatar billede nielle Nybegynder
22. juli 2006 - 23:56 #27
Session.php includer jo selv en masse andre biblioteker - det kan man se af koden. De skal også ligge på det rigtige sted i forhold til sesseion.php for at det virker.
Avatar billede clausberg Nybegynder
22. juli 2006 - 23:58 #28
Nå ja :-)

Nu får jeg blot fejlen:
HTTP 404 - Filen blev ikke fundet
Avatar billede nielle Nybegynder
23. juli 2006 - 00:02 #29
Tja, det er jo ikke så informativt.

Men jeg vil anbefale at du simpelthen alder session.php, og alle de ander filer som blev installeret sammen med den, blive liggende der hvort de lå¨til at starte med.

I stedet skal du rette din

include("include/session.php");

- i test.php til at pege på dem. Dvs. at der skal stå noget andet end "include/" i starten.
Avatar billede clausberg Nybegynder
23. juli 2006 - 00:04 #30
Det prøver jeg lige også... ellers så tror jeg at fejlen ligger et helt andet sted. Jeg roder lige rundt - det tager nogle nogle timer (det gør det jo altid :-)... så vender jeg tilbage
Avatar billede clausberg Nybegynder
23. juli 2006 - 15:42 #31
Interessant - nu virker det. Det script du Nielle forslog på baggrund af Jakobdo´s script virker til perfektion!!!!!! :-)

Selvom jeg nu kan password beskytte mine sider, så får jeg dog stadig en fejl på forsiden - på forsiden findes nemlig den formular hvorigennem man logger sig ind. Fejlen lyder:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /customers/bilfri12.dk/bilfri12.dk/httpd.www/index.php:11) in /customers/bilfri12.dk/bilfri12.dk/httpd.www/include/session.php on line 46

Jeg kan dog uden problemer logge ind, og alt andet virker. Jeg får blot denne fejl. Hvorfor mon?????
Avatar billede jakobdo Ekspert
23. juli 2006 - 16:27 #32
Du får fejlen fordi session_start() ikke er i toppen!
session_start(); skal være øverst i din kode:

<?php
session_start();

og ikke sådan her:

<html>
<head>
noget mere...
<?php
session_start();
Avatar billede nielle Nybegynder
23. juli 2006 - 16:43 #33
Bemærk at du ikke selv skal skrive session_start() nogen steder i din kode. Den bliver kladt automatisk i forbindelse med denne linje:

include("hvad du nu har her/session.php");

Det er dog korrekt at du ikke selv må udskrive noget som helst andet før du har denne linje i din kode.
Avatar billede clausberg Nybegynder
23. juli 2006 - 16:52 #34
Jakobdo>>>> Ja, det er rigtigt :-) Nu virker det det - næsten uden fejl :-)

Efter at jeg har logget ind, så bliver skriver den Velkommen Claus - og den skal den også. Men den skriver også "Claus/" - og det er tydeligvis en fejl.

Jeg kan imidlertid fjerne denne "fejl" ved at slette:
include("include/view_active.php");
men det ved jeg ikke om jeg skal.
Avatar billede clausberg Nybegynder
23. juli 2006 - 16:59 #35
Det eneste jeg tror den gør, er blot at skrive navnet på den der er logget ind. Og det kan man vel godt undvære - jeg tænker, at der sker vel ikke noget i forhold til de oplysninger der hentes/uploades til databasen
Avatar billede clausberg Nybegynder
23. juli 2006 - 17:08 #36
Jeg lader det stå - fejlmeldingen forsvinder når jeg slår "vis fejlmeddelser" fra på mit hotel.

Mange tak for hjælpen - jeg har VIRKELIGT lært noget, og kommer forbi nogle svære steder :-) Smider I - Jakobdo og Nielle - et svar
Avatar billede nielle Nybegynder
23. juli 2006 - 17:14 #37
Det er ikke nok at ændre indstillingerne (selv om du *også* skal gøre det af hensyn til sikkerheden), du *skal* have fundet ud hvor fejlen kommer fra og så skal du have rettet det.

Måske skal du bare flytte:

include("include/view_active.php");

- ned til efter:

include("hvad du nu har her/session.php");

?


... og et svar fra mig :^)
Avatar billede jakobdo Ekspert
23. juli 2006 - 17:17 #38
Og et svar herfra.
Avatar billede clausberg Nybegynder
23. juli 2006 - 17:17 #39
Ja, det er rigtigt - jeg må finde fejlen :-) Jeg roder videre. Det er super fedt med så meget hjælp. Takker !!!
Avatar billede clausberg Nybegynder
23. juli 2006 - 17:18 #40
Og hermed point :-)
Avatar billede nielle Nybegynder
23. juli 2006 - 17:22 #41
Takker for point :^)
Avatar billede jakobdo Ekspert
23. juli 2006 - 17:23 #42
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