/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
login
Fra : Lai Yin


Dato : 03-02-04 00:49

hej
jeg er igang med at lave en hjemmeside, hvor der skal være en login side.
Denne side skal sende brugeren videre til en bestem side fx billedbank.php.
Jeg har brugt noget kode jeg har fundet på nettet, men jeg kan ikke helt
finde ud af, hvoordan jeg undgår, at folk bare kan komme ind på
billedbank.php, bare ved at skrive det direkte i adresselinjen.

Her er koden til loginsiden, men der skal vel være et eller andet på
billedbank.php, som tjekker at man er kommet fra den side?

<?php

$goHere="album/index.php"; // Page to send successfull log-ins to
$logSuccess="1"; // Track / log successful log-ins (1 = yes
and 0 = no)

$namePassCombos = array ( // Add as many lines as you like below

   "name1" => "flip", // Add username and password combo here
   "name2" => "pass2", // Add username and password combo here
   "name3" => "pass3" // Add username and password combo here

);

// Multiple user Log-In script by Dave Lauderdale - Originally published
at: www.digi-dl.com

// The below code may or may not be necessary for you
$loginName = $_POST['loginName']; $passWord = $_POST['passWord'];

// Replace bad characters in user input
$passWord = preg_replace ("/</","[",$passWord); $loginName = preg_replace
("/>/","]",$loginName);
$loginName = str_replace(".."," ",$loginName); $passWord =
str_replace(".."," ",$passWord);

// Trim whitespace from user input
$loginName=trim($loginName); $passWord=trim($passWord);

// If log-in was successfull
$logInTracker="successLog.txt";
function success($logSuccess,$logInTracker,$loginName,$goHere)
{
   $date=date ("l dS of F Y h:i:s A");
   $register_globals = (bool) ini_get('register_gobals');
   if ($register_globals) $ip = getenv(REMOTE_ADDR);
   else $ip = $_SERVER['REMOTE_ADDR'];

// If webmaster wants to log successful logins
   if($logSuccess=="1"){
      $log=fopen("files/$logInTracker", "a+");
      fputs($log, "$loginName logged in on: $date - Logged IP address:
$ip\n");
      fclose($log);
   }

// If no log or after log then go here
   Header("Location: $goHere");
}

// If there is an error
function error($notice)
{
// Display error notice (0)
   if($notice=="0"){
      echo"
         <title>Login fejl: Manglende navn / password</title>
         <body><br><p style=\"font:11pt arial\"><font color=red>NOTICE:</font>
Login fejl: Manglende navn / password.
         <br><br><br>Klik <a href=\"javascript:history.back(1)\"
style=\"color:black\">her</a> for at prøve igen.
         </body></html>
      "; exit;
   }

// Display error notice (1)
   if($notice=="1"){
      echo"
         <title>Login fejl: Ugyldigt navn / password</title>
         <body><br><p style=\"font:11pt arial\"><font color=red>NOTICE:</font>
Login fejl: Ugyldigt navn / password.
         <br><br><br>Klik <a href=\"javascript:history.back(1)\"
style=\"color:black\">her</a> for at prøve igen.
         </body></html>
      "; exit;
   }
}

// If the user doesnt enter a name or password then set error notice to 0
and display error
if (($loginName == "") || ($passWord == "")) { $notice=0; error($notice); }

// If the username and password entered don't match then set error notice
to 1 and display error
else if (strcmp($namePassCombos[$loginName],$passWord) != 0) { $notice=1;
error($notice); }

// If the log in was sucessful
else if (strcmp($namePassCombos[$loginName],$passWord) == 0) {
success($logSuccess,$logInTracker,$loginName,$goHere); }


?>

 
 
zigma.dk (03-02-2004)
Kommentar
Fra : zigma.dk


Dato : 03-02-04 08:37

> Her er koden til loginsiden, men der skal vel være et eller andet på
> billedbank.php, som tjekker at man er kommet fra den side?

Ja, du kan gøre det at du sætter en cookie på brugerens computer hvis denne
logger ind.

setCookie('logget_ind','ja');

Herefter kan du så på billedbank.php tjekke om cookien er sat; er den det
sker der ingenting, er den ikke skal brugeren sendes tilbage til login-siden:

if($_COOKIE['logget_ind']=='ja'){ // Hvis brugeren=logget ind
echo "Du er logget ind!";
}else{
header("Location: login.php");
}

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Thomas Rokamp (03-02-2004)
Kommentar
Fra : Thomas Rokamp


Dato : 03-02-04 11:48

> Ja, du kan gøre det at du sætter en cookie på brugerens computer hvis
denne
> logger ind.
>
> setCookie('logget_ind','ja');
>
> Herefter kan du så på billedbank.php tjekke om cookien er sat; er den det
> sker der ingenting, er den ikke skal brugeren sendes tilbage til
login-siden:
>
> if($_COOKIE['logget_ind']=='ja'){ // Hvis brugeren=logget ind
> echo "Du er logget ind!";
> }else{
> header("Location: login.php");
> }

Det samme kan gøre med Session, men denne kræver at du bruger
"session_start()" i begyndelsen af hver side.
Ellers stort set det samme:
Når brugeren er looget ind:
$_SESSION["login"] = "ja";

Se om brugeren er logget ind:
if($_SESSION["login"] == "ja") {
echo "Du er logget ind!";
} else {
header("Location: login.php");
exit; // Vigtig - husk exit
}


Mon der så er nogen der kan forklare, hvad der er bedst? Jeg har altid brugt
session, mens andre sværger til cookies. Hvad er bedst?
Cookies kan sættes til at blive gemt fra gang til gang, så man kan huske
data om brugeren (lokalt)... Det kan sessions ikke... fyld selv på, hvis du
har for eller imod input :)

/Thomas



Kristian Thy (03-02-2004)
Kommentar
Fra : Kristian Thy


Dato : 03-02-04 11:52

Thomas Rokamp uttered:
> Cookies kan sættes til at blive gemt fra gang til gang, så man kan huske
> data om brugeren (lokalt)...

Du gemmer forhåbentlig ikke brugerdata i login-kagen og gemmer den
persistent på brugerens maskine? Det skal i to forskellige kager, og
så kan du alligevel ligeså godt bruge sessions til at styre login...

Anyhoo, så kan jeg godt lide sessions pga. jeg ikke selv skal sidde og
styre kager, expiration, etc. - session_start() og session_destroy(),
så er den klaret

\\kristian
--
My software never has bugs. It just develops random features.

Thomas Rokamp (03-02-2004)
Kommentar
Fra : Thomas Rokamp


Dato : 03-02-04 13:51

> Du gemmer forhåbentlig ikke brugerdata i login-kagen og gemmer den
> persistent på brugerens maskine? Det skal i to forskellige kager, og
> så kan du alligevel ligeså godt bruge sessions til at styre login...

Nej, og jeg har faktisk heller ikke brugt cookies før...

> Anyhoo, så kan jeg godt lide sessions pga. jeg ikke selv skal sidde og
> styre kager, expiration, etc. - session_start() og session_destroy(),
> så er den klaret

Ja - det er rart... Jeg har lagt mærke til, at mange sender et "sid"
(session id?) med rundt på deres site. Det lader til at være den mest
optimale løsning, hvis man ikke er sikker på at browseren understøtter
session-data eller cookies.
Kræver så formentlig noget db bagved, der håndterer, om sessionen er udløbet
eller aktiv...?



Lai Yin (04-02-2004)
Kommentar
Fra : Lai Yin


Dato : 04-02-04 12:48

On Tue, 3 Feb 2004 11:48:24 +0100, Thomas Rokamp wrote:

>> Ja, du kan gøre det at du sætter en cookie på brugerens computer hvis
> denne
>> logger ind.
>>
>> setCookie('logget_ind','ja');
>>
>> Herefter kan du så på billedbank.php tjekke om cookien er sat; er den det
>> sker der ingenting, er den ikke skal brugeren sendes tilbage til
> login-siden:
>>
>> if($_COOKIE['logget_ind']=='ja'){ // Hvis brugeren=logget ind
>> echo "Du er logget ind!";
>> }else{
>> header("Location: login.php");
>> }
>
> Det samme kan gøre med Session, men denne kræver at du bruger
> "session_start()" i begyndelsen af hver side.
> Ellers stort set det samme:
> Når brugeren er looget ind:
> $_SESSION["login"] = "ja";
>
> Se om brugeren er logget ind:
> if($_SESSION["login"] == "ja") {
> echo "Du er logget ind!";
> } else {
> header("Location: login.php");
> exit; // Vigtig - husk exit
> }
>
>
> Mon der så er nogen der kan forklare, hvad der er bedst? Jeg har altid brugt
> session, mens andre sværger til cookies. Hvad er bedst?
> Cookies kan sættes til at blive gemt fra gang til gang, så man kan huske
> data om brugeren (lokalt)... Det kan sessions ikke... fyld selv på, hvis du
> har for eller imod input :)
>
> /Thomas

ok - jeg nu prøvet med dit forslag men så får jeg fejl som lyder følgende:
Warning: session_start(): open(/tmp\sess_626e5d663fc926f3634ea87a2c8a457b,
O_RDWR) failed: No such file or directory (2) in
c:\web\cheng.dk\album\photo.php on line 2

Warning: session_start(): Cannot send session cookie - headers already sent
by (output started at c:\web\cheng.dk\album\photo.php:2) in
c:\web\cheng.dk\album\photo.php on line 2

Warning: session_start(): Cannot send session cache limiter - headers
already sent (output started at c:\web\cheng.dk\album\photo.php:2) in
c:\web\cheng.dk\album\photo.php on line 2

Warning: Cannot modify header information - headers already sent by (output
started at c:\web\cheng.dk\album\photo.php:2) in
c:\web\cheng.dk\album\photo.php on line 6

jeg kan ikke lige overskue hvad der skulle være galt

Dan Molberg (04-02-2004)
Kommentar
Fra : Dan Molberg


Dato : 04-02-04 23:23

In news:9o3tf9xom0rt.axzisx0kvk5k$.dlg@40tude.net,
Lai Yin <laiyin@placebo.cheng.dk> typed:
> følgende: Warning: session_start():
> open(/tmp\sess_626e5d663fc926f3634ea87a2c8a457b, O_RDWR) failed: No
> such file or directory (2) in c:\web\cheng.dk\album\photo.php on line
> 2
"c:\web\cheng.dk\album\photo.php" Siger til mig du kører Windows og
"/tmp\sess_626e5d663fc926f3634ea87a2c8a457b" siger mig du har sat dit temp
bibliotek forkert (eller ikke sat det op), for det er sat til default
UNIX....
--
MVH Dan Molberg
http://beyond.repair.dk/



Lai Yin (10-02-2004)
Kommentar
Fra : Lai Yin


Dato : 10-02-04 14:23

On Wed, 4 Feb 2004 23:23:21 +0100, Dan Molberg wrote:

> In news:9o3tf9xom0rt.axzisx0kvk5k$.dlg@40tude.net,
> Lai Yin <laiyin@placebo.cheng.dk> typed:
>> følgende: Warning: session_start():
>> open(/tmp\sess_626e5d663fc926f3634ea87a2c8a457b, O_RDWR) failed: No
>> such file or directory (2) in c:\web\cheng.dk\album\photo.php on line
>> 2
> "c:\web\cheng.dk\album\photo.php" Siger til mig du kører Windows og
> "/tmp\sess_626e5d663fc926f3634ea87a2c8a457b" siger mig du har sat dit temp
> bibliotek forkert (eller ikke sat det op), for det er sat til default
> UNIX....

det havde jeg også på fornemmelsen. Når jeg kører mine scripts på localhost
vil de ikke afvikles, men de fungere fint når de bliver oploadet til min
hjemmeside.

jeg prøver lige at rette op fejlen og ser om det hjælper

Dennis Møllegaard Pe~ (03-02-2004)
Kommentar
Fra : Dennis Møllegaard Pe~


Dato : 03-02-04 14:20

On Tue, 3 Feb 2004 07:37:01 +0000 (UTC)
zigma.dk <zigma@zigma.dk> wrote:
> Ja, du kan gøre det at du sætter en cookie på brugerens computer hvis denne
> logger ind.
> setCookie('logget_ind','ja');
[billedbank.php]
> if($_COOKIE['logget_ind']=='ja'){ // Hvis brugeren=logget ind
> echo "Du er logget ind!";
> }else{
> header("Location: login.php");
> }

Dårlig løsning. Stol aldrig på data fra brugeren uden at tjekke det. Hvis jeg ville ind på en "beskyttet" side, kunne jeg jo bare få min browser til at sende en logget_ind cookie med værdien ja. Så behøvede jeg ikke at bekymre mig om brugernavn og kodeord. Glem aldrig den slags informationer hos brugeren.

Brug sessions - de gemmer et id hos brugeren. På serveren har du så nogle data knyttet til det id (men de bliver kun på serveren og derved kan brugeren ikke ændre disse). Self. kan brugeren prøve at gætte en andens persons ID, men dette kræver en hel del mere, end at rette i en cookie.

mvh
dennis

--
Dennis Møllegaard Pedersen, Denmark
replace spam with my firstname spam@moellegaard.dk
PGP fingerprint = 5A23 2E7D 7F4F 7FBE 39AC CDEF 55A0 FF70 87C0 59D9

Søg
Reklame
Statistik
Spørgsmål : 177502
Tips : 31968
Nyheder : 719565
Indlæg : 6408534
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste