Just nu i M3-nätverket
Gå till innehåll
Perg

Inloggning igen

Rekommendera Poster

Tjenare!

Knåpar lite med php o mysql här och det går väl bra.

Har dock lite problem då jag ska kombinera mitt login-script med frames.

 

Det ska gå till som så att du skriver in inloggningsinfo på en sida som sen skickar dig vidare till en sida där användarnamn och lösenord kontrolleras. Denna sida ska sen skicka dig vidare beroende på om du skrivit rätt eller fel såklart.

 

Nu är det så att jag använder mig av frames och om personen i fråga skrivit in rätt uppgifter ska hela sidan laddas om, dvs alla frames.

 

Nu har jag sett lite olika lösningar, men jag är fortfarande tveksam till vilken som är bäst. Ska jag använda header("Location: blabla.php") kan jag ju varken skicka användaren till olika sidor beroende på rätt eller fel uppgifter eller ladda om alla frames.

 

Sen har jag även sett lösningar med javascript eller meta-taggar och till sist att man ska deklarera variabler inom frameset-taggen (denna fattade jag inte hur den skulle fungera). Är det så att jag bara kan ta en som tycks fungerar eller är det någon som är bäst? Kanske att det finns ytterligare någon lösning som är att föredra?

 

Sen undrade jag en liten grej till om det här med att kontrollera om användaren är inloggad innan sidan visas. Är det tillräckligt att bara lägga detta högst upp på de lösenordskyddade sidorna:

<?php

session_start();

if (!@$_SESSION["username"])

{

header("Location: ./login.php");

exit;

}

?>

 

 

Tack för ordet!

Php-freaksen Cariad och TicoRomano borde kunna det här :)

 

[inlägget ändrat 2003-05-04 16:20:02 av Perg]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Grr... Fel i Eforum. Jag får upp skriptet jag försöker skriva som en HTML-sida...

 

Mitt förslag är att du har en inloggningsruta INNAN du delar upp sidan i ramar.

På så sätt blir du inte JavaScript-beroende, vilket du annars kommer bli.

 

Sedan gör du en koll i början av varje ram-skript som ser om besökaren är inloggad eller inte, och om denne inte är det skickar du om (mha JavaScript) användaren till inloggningssidan.

 

Om då användaren inte har JavaScript aktiverat på sin dator så skriver du bara ut en länk till inloggningssidan.

 

På så sätt kommer det alltid att fungera.

 

index.php

<?php

/* Starta session */
session_start();

/* Här sköter du inloggningen och valideringen av användare mot databasen. Dessa kodrader får du lägga till själv */
if (@$_POST["loggain"])
{
$_SESSION["inloggad"] = true;
}

if (@$_SESSION["inloggad"])
{
include("sidor/ramar.php");
}
else
{
include("sidor/inloggning.php");
}

?>

inloggning.php:

<html>
<form method="post">
<input type="text" name="anv" /><br />
<input type="password" name="losen" /><br />
<input type="submit" value="Logga in" /><br />
<input type="hidden" name="loggain" value="1" />
</html>

utloggning.php

<?php
@session_destroy();
unset($_SESSION);
?>
<script language="JavaScript" type="text/javascript">
top.location = 'index.php';
</script>

ramar.php

<?php

/* Starta session */
session_start();

?>
<html>
<?php
if (!@$_SESSION["inloggad"])
{
include("sidor/utloggning.php");
}
?>
<frameset>
...
</frameset>
</html>

 

Lägg sedan in detta i alla undersidor till ramar.php:

<?php

/* Starta session */
session_start();

?>
<html>
<?php
if (!@$_SESSION["inloggad"])
{
include("sidor/utloggning.php");
}
?>
<body>
...
</body>
</html>

 

[inlägget ändrat 2003-05-04 17:20:46 av Cariad]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ibland vill man ge någon 10 poäng :)

 

Utmärkt svar! Jag visste att jag kunde lita på dig =)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Man bugar och tackar.

 

Hör av dig om det är något du funderar över i koden ovan.

Jag har inte testkört den, så det är mycket möjligt att den innehåller några parse errors, men de lyckas du nog reda ut.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Faktiskt en sak som jag funderade på nu när jag skulle testa det.

 

Är det nån skillnad på att göra så som du gjort eller att skippa:

<input type="hidden" name="loggain" value="1" />

och bara skriva så här:

<?php

if (!@$_SESSION["anv"])

{

include("sidor/utloggning.php");

}

?>

 

Förutsatt att jag tilldelat $_SESSION["anv"] ett värde.

[inlägget ändrat 2003-05-04 18:28:17 av Perg]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Alltså det

<input type="hidden" name="loggain" value="1" />

gör är att den skickar med en POST-variabel när du skickar formuläret. Denna variabel kollar man sedan efter i följande kodblock, för att se om besökaren försöker logga in:

if (@$_POST["loggain"])
{
$_SESSION["inloggad"] = true;
}

 

Du kan alltså inte ta bort den raden.

 

Däremot kan du ju byta namn på sessionsvariablen som du gjort.

Från $_SESSION["inloggad"] till $_SESSION["anv"], om du nu kanske vill spara den inloggade användarens namn istället.

Tänk bara på att byta ut alla, och göra om kodblocket ovan till::

if (@$_POST["loggain"])
{
$_SESSION["anv"] = $_POST["anv"];
}

Du måste särskilja på SESSION- och POST-variabler...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Det är glasklart :)

 

Nu har jag dock stött på följande:

 

Om jag efter att ha loggat in skriver in index.php i adressfältet får jag upp det klassiska felmeddelandet "Varning! Sidan gäller inte längre."

 

Är det nåt fel i mitt kod tro lr kanske att detta inte går att undvika?

 

 

Jo, en sak till :)

I själva huvudsidan har jag en variabel i url:n som bestämmer vilken sida som ska visas site.php?section=blabla sen står det så här:

switch ($_GET['section']) {

case "blabla":

include("sections/blabla.php");

break;

}

Stämmer det då att det räcker att göra mappen sections otillgänglig för utomstående för att vara säker på att ingen utifrån kan komma åt blabla.php? Eller måste jag inkludera någon extra kod i blabla.php?

 

Mycket nu :P

Tack på förhand

[inlägget ändrat 2003-05-04 19:40:18 av Perg]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Okej, för att lösa "Varning! Sidan gäller inte..." så kan du skicka om besökaren till samma sida igen, fastän utan POST-variabler.

 

Kanske verkar lite mysktikt, men på så sätt slipper du nämnda problem:

if (@$_POST["loggain"])
{
$_SESSION["anv"] = $_POST["anv"];
header("Location: " . $_SERVER["REQUEST_URI"]);
}

 

Ja, det stämmer att du bara ska behöva göra mappen i fråga oläsbar för externa besökare.

Men för att höja säkerheten lite till så ser du till att filerna har filändelsen .php (då kan besökarna inte se källkoden, utan filen kommer alltid exekveras), och sedan kan du lägga in en kontrollvariabel.

 

I den inkluderande filen:

$kontrollvariabel = true;
include("mapp/fil.php");

I den inkluderade filen högst upp (fil.php):

if (!$kontrollvariabel) exit;

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Hej Cariad.

Denna bit tycks inte fungera:

if (@$_POST["loggain"])

{

$_SESSION["anv"] = $_POST["anv"];

header("Location: " . $_SERVER["REQUEST_URI"]);

}

Jag får upp felen

Notice: Undefined index: REQUEST_URI in...
och
Warning: Cannot modify header information - headers already sent by...

 

Någon idé?

 

[inlägget ändrat 2003-05-06 02:27:30 av Perg]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Aha, det gamla Windowsproblemet!

 

Din Windowsmaskin sättet tyvärr inte den variablen.

Men oroa dig inte. Det finns lösningar.

 

Lägg in följande innan:

if (!isset($_SERVER["REQUEST_URI"])) {
$_SERVER["REQUEST_URI"] = $_SERVER["SCRIPT_NAME"];
if ($_SERVER["QUERY_STRING"]) $_SERVER["REQUEST_URI"] .= "?" . $_SERVER["QUERY_STRING"];
}

Läs mer om detta i denna diskussion:

//eforum.idg.se/viewmsg.asp?EntriesId=364050

 

[Ändrat] Nu trodde Eforum att jag skrev på kinesiska igen. Trodde Erik hade fixat det. Blir en buggrapport nu då... :)

 

[inlägget ändrat 2003-05-06 02:40:56 av Cariad]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tänk att du är vaken så här dags också :)

Nåväl jag kan inte riktigt uttyda din kod, då det verkar fattas lite måsvingar o dylikt. Jag testade lite olika kombinationer och fick 'Notice: Undefined index: QUERY_STRING in...'. Tänka sig =)

 

Jag bytte ut följande:

if (@$_POST["loggain"])

{

$_SESSION["anv"] = $_POST["anv"];

header("Location: " . $_SERVER["REQUEST_URI"]);

}

mot

if (@$_POST["loggain"])

{

$_SESSION["anv"] = $_POST["anv"];

header("Location: index.php");

}

Det verkar funka bra. Jag får inte upp nåt "Varning! Sidan gäller inte längre".

Är det så enkelt tro?

 

Tack för din hjälpsamhet!

[inlägget ändrat 2003-05-06 03:18:38 av Perg]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
tänk att du är vaken så här dags också
Du, det är väldigt knappt... Men om man har en deadline så har man... :)

Ta ut lite extra pengar ur kunden för sena arbetstimmar är aldrig fel...

;)

 

Ja, jag hade visst missat en sak i koden ovan. Den här är korrigerad och ska inte producera några fel.

Jag föreslår att du använder dig av den och "header("Location: " . $_SERVER["REQUEST_URI"]);" istället.

Annars måste du vara noga med att ändra värdet om du skulle få för dig att byta namn på filen någon gång.

 

Nej detta är mycket bättre:

if (!isset($_SERVER["REQUEST_URI"])) {
$_SERVER["REQUEST_URI"] = $_SERVER["SCRIPT_NAME"];
if (isset($_SERVER["QUERY_STRING"])) $_SERVER["REQUEST_URI"] .= "?" . $_SERVER["QUERY_STRING"];
}

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Hoppas du inte tar illa upp om jag använder mitt eget sätt. Vill inte besvära dig med dom nya problemen jag fått =)

 

Om du nu absolut vill veta så får jag upp en ruta som säger följande..

inetinfo.exe - Programfel

Undantag unknown software exception (0xc00000fd) uppstod i programmet på adress 0x77fcb19d.

 

Hur som helst, jag är säker på att din metod är bättre när den väl fungerar, men som sagt lite problematiskt.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Vad i helvete är det för jävla dum regel att man ej kan poängsätta inlägg som är äldre än 3 månader gamla!? VAD?

 

Bort med den skitregeln nu!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag håller med, det är ingen vidare bra regel.

Man kan ju fortfarande ha stor hjälp av riktigt gamla inlägg.

Nåväl, vi överlever nog.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Jag håller med, det är ingen vidare bra regel.

Man kan ju fortfarande ha stor hjälp av riktigt gamla inlägg.

 

Jo, dessuom är ju den här regeln med max 5 poäng per inlägg vansinnigt löjlig...

 

Snälla Eforum-innehavare:

Ta bort de två ovan nämnda poängreglerna nu!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
if (@$_POST["loggain"])

 

Är detta verkligen ett komplett villkor i If-satsen?

 

Vad innebär @-et egentligen?

 

Tack på förhand!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Jo, dessuom är ju den här regeln med max 5 poäng per inlägg vansinnigt löjlig...

 

Vad i helvete är det för jävla dum regel att man ej kan poängsätta inlägg som är äldre än 3 månader gamla!? VAD?

 

Vet inte om du har missat poängmissbrukandet - det var det som födde båda dessa regler och det verkar ha satt stopp för missbruket... tycker inte att de ska tas bort om nu poängsystemet alls måste vara kvar.

 

--

.Wey - bort med poängen...

 

Go da! Sing a song!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Vet inte om du har missat poängmissbrukandet - det var det som födde båda dessa regler och det verkar ha satt stopp för missbruket... tycker inte att de ska tas bort om nu poängsystemet alls måste vara kvar.

 

Om du med poängmissbruk menar att folk delade ut för många poäng så berättigare det en regel och inte fler:

En användare får ej dela ut fler än ett poäng per varje inlägg

 

Alla andra regler slår helt fel...

 

*stolt poängmissbrukare(utdelare)* :)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Vad innebär @-et egentligen?
Att eventuellt felmeddelande/notice inte ska skrivas ut.

 

_________

TicoRoman - Anfall är bästa försvar

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

if ($variabel}

{

//kod

}

 

är ett korrekt uttryck om $variabel är en boolean, och har värdet true eller false. Om $variabel = true körs koden //kod.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Att eventuellt felmeddelande/notice inte ska skrivas ut.

 

Okej... Poäng för det!

 

Vad betyder utropstecknet i den här kodraden???

if (!@$_SESSION["inloggad"])

 

Tack på förhand!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Vad betyder utropstecknet i den här kodraden???
! betyder inte, typ...

 

Ex:

if ($_SESSION["inloggad"])

*om sessionsvariabeln inloggad finns. (true)

 

if ([i][b][color="#ff0000"]![/color][/b][/i]$_SESSION["inloggad"])

*om sessionsvariabeln inloggad inte finns. (inte true; false)

 

_________

TicoRoman - Anfall är bästa försvar

 

[inlägget ändrat 2003-11-23 02:01:23 av TicoRoman]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Om du med poängmissbruk menar att folk delade ut för många poäng så berättigare det en regel och inte fler:

En användare får ej dela ut fler än ett poäng per varje inlägg

 

Nej, det var användare som systematiskt gick igenom specifika andras inlägg flera år tillbaka i tiden och poängsatte VARENDA ETT oavsett vad det stod...

 

--

.Wey

 

Go da! Sing a song!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...