webForumDet fria alternativet

Hjälp med en enkelt inloggningsscript!

PHP

9 svar · 4 049 visningar · startad av Annakay

Medlem sedan sep. 2003143 inlägg
Frågan#1

Kan någon vänlig själ hjälpa mig?

Skulle fixa ett enkelt inloggningsscript på en hemsida som ska vara klar idag (skulle varit klar igår) och jag hade tänkt sitta och jobba medan lilla dottern sov. Jag hann precis börja kika när hunden skällde och väckte henne... :(

Jag är väldigt usel på PHP och undrar om någon kan peka mig i rätt riktning till ett busenkelt inloggningsscript där en användare ska mata in ett lösenord (inget användarnamn) för att få tillgång till information på ett antal sidor. Det är ingen superhemlig information så det behöver inte vara en superdupersäker lösning. Bara hålla ute den breda massan. ;)

Vore jättetacksam! Måste jaga dottern nu (hon har precis lärt sig krypa...)

Medlem sedan juni 20031 837 inlägg
#2
<?php
if(isset($_POST['password']))
{
	$pw = $_POST['password'];
	
	if($pw == "mittlösenord")
	{
		session_start();
		$_SESSION['logged_in'] = true;
		header("Location: correct.htm");
	}
	else
	{
		header("Location: bad_pw.htm");
	}
}
?>
<html>
	<body>
		<form action="check.php" method="post">
			<input type="password" name="password"> <input type="submit" value="Login">
		</form>
	</body>
</html>

sen för varje sidan som man kommer åt bör man kolla om användaren är inloggad. Om sidorna är PHP-sidor så kan man inkludera följande kod överst p åde sidorna:

<?php
sesstion_start();

if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in']!=true)
{
  // användaren har inte loggat in, skicka användaren till inloggningsssidan
  header("Location: check.php");
}
?>

ett alternativ är att lägga koden ovanför i en separat fil (ex: validate.php) och inkludera den över på alla sidor med:

require_once("validate.php");

annars kan man bara skriva in adressen till de sidorna så kommer man åt dem.

Medlem sedan sep. 2003143 inlägg
#3

Åh så snällt!!

Inloggningen går bra, från index.php kommer jag till start.php som man ska om man matat in rätt lösenord.

Jag får dock felmeddelandet på start.php:

 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\XXXX\XXXX\gastbok\start.php:2) in C:\XXXX\XXXX\gastbok\conn.php on line 2

Sidan ser ut så här:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php require_once("validate.php"); ?>

<head>
	<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
etc etc....

och validate.php så här:

<?php
session_start();

if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in']!=true)
{
  // användaren har inte loggat in, skicka användaren till inloggningsssidan
  header("Location: index.php");
}
?>
Medlem sedan sep. 2003143 inlägg
#4

Vänta lite...

Medlem sedan juni 20014 421 inlägg
#5

Byt plats på !<doctype och <?php require_once

Medlem sedan sep. 2003143 inlägg
#6

Jag blir inte klok på det här. Jag skapade en sida: logout.php med koden

<?php 
$_SESSION['logged_in'] = false;
?>

Blir jag utloggad då? För om jag anropar den sidan och sedan går till start.php så ser jag sidan ändå...

Medlem sedan sep. 2003143 inlägg
#7

colione: Gjort, och då funkade det utan felmeddelanden i alla fall

Medlem sedan sep. 2003143 inlägg
#8

Det ser ut att ha löst sig, jag lade till session_start(); i logout.php... :)

TUSEN TACK för hjälpen grabbar! :)

Medlem sedan juni 20014 421 inlägg
#9

Använd session_destroy() istället

http://se.php.net/function.session-destroy

Medlem sedan feb. 2007278 inlägg
#10

I samband med att man byter behörighet (loggar in eller ut) bör man alltid använda session_regenerate_id() för att minska risken för "session hijacking"!

http://shiflett.org/articles/the-truth-about-sessions

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)