login werkt lokaal, niet online
ik ben pas begonnen met het maken van een simpele website voor een groep mensen.
Om ervoor te zorgen dat niet iedereen de website zomaar kan zien heb ik een login pagina gemaakt met een algemeen wachtwoord. Gebruikers hoeven dus geen account aan te maken. Na het intypen (en controleren) van het wachtwoord wordt er een cookie aangemaakt. Vervolgens controleren alle pagina's binnen de website of deze cookie bestaat en anders wordt er verwezen naar de login pagina.
Dit werkte allemaal prima via localhost maar nu ik de website online heb krijg ik een foutmelding na het intypen van het correcte wachtwoord.
Hier zijn (gedeeltelijk) de codes van de drie benodigde pagina's:
login.php waarin het formulier staat waar het wachtwoord in moeten worden getypt:
Code (php)
handlelogin.php waarin, naast het wachtwoord, ook wordt gecontroleerd of javascript en cookies enabled zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
<html>
<head>
<title>Handle login</title>
<!-- check of javascript is enabled -->
<noscript>
Om deze website te bezoeken moet JavaScript ingeschakeld zijn. <br /> <br /> Klik <a href="login.php">hier</a> om terug te gaan, of klik <a href="faq.html">hier</a> als u hulp wilt bij het inschakelen van JavaScript.
</noscript>
<!-- check of cookies zijn enabled -->
<script type="text/javascript">
if (navigator.cookieEnabled == false){
var faq=window.confirm('Om deze website te bezoeken moet uw browser cookies accepteren.\n\nVoor meer informatie hierover klik OK.\nKlik annuleren om terug te gaan naar de vorige pagina.')
if (faq) {
window.location="faq.html";}
else{
window.location="login.php"; }
}
</script>
<?php
// check of er iets is ingevuld
if (empty($_POST['wachtwoord']))
{ ?>
<script type="text/javascript">
window.location="login.php"; </script>
<?
exit;
}
// check of wachtwoord klopt
$password=trim($_POST['wachtwoord']);
if ($password !='###')
{
?>
<script type="text/javascript">
window.alert('Het ingevoerde wachtwoord is onjuist. \nU wordt terugverwezen.');
window.location="login.php";
</SCRIPT>
<?
exit;
}
else
{
setcookie("amsing","http://www.familieamsing.nl",time()+86400); // 24 uur
?>
<script type="text/javascript">
window.alert('Het ingevoerde wachtwoord is juist. \nWelkom op de website!');
window.location="index.php";
</SCRIPT>
<?
exit;
}
?>
</head>
<body>
</body>
</html>
?>
<html>
<head>
<title>Handle login</title>
<!-- check of javascript is enabled -->
<noscript>
Om deze website te bezoeken moet JavaScript ingeschakeld zijn. <br /> <br /> Klik <a href="login.php">hier</a> om terug te gaan, of klik <a href="faq.html">hier</a> als u hulp wilt bij het inschakelen van JavaScript.
</noscript>
<!-- check of cookies zijn enabled -->
<script type="text/javascript">
if (navigator.cookieEnabled == false){
var faq=window.confirm('Om deze website te bezoeken moet uw browser cookies accepteren.\n\nVoor meer informatie hierover klik OK.\nKlik annuleren om terug te gaan naar de vorige pagina.')
if (faq) {
window.location="faq.html";}
else{
window.location="login.php"; }
}
</script>
<?php
// check of er iets is ingevuld
if (empty($_POST['wachtwoord']))
{ ?>
<script type="text/javascript">
window.location="login.php"; </script>
<?
exit;
}
// check of wachtwoord klopt
$password=trim($_POST['wachtwoord']);
if ($password !='###')
{
?>
<script type="text/javascript">
window.alert('Het ingevoerde wachtwoord is onjuist. \nU wordt terugverwezen.');
window.location="login.php";
</SCRIPT>
<?
exit;
}
else
{
setcookie("amsing","http://www.familieamsing.nl",time()+86400); // 24 uur
?>
<script type="text/javascript">
window.alert('Het ingevoerde wachtwoord is juist. \nWelkom op de website!');
window.location="index.php";
</SCRIPT>
<?
exit;
}
?>
</head>
<body>
</body>
</html>
?>
En als laatste (onderdeel van) index.php waarnaar verwezen wordt wanneer het wachtwoord correct is. Nogmaals: wanneer mensen /index.php in de adresbalk typen moet er dus gecontroleerd worden of er al is ingelogd, anders worden ze naar login.php verwezen.
Dit dit stukje staat dus op iedere pagina binnen het domein en staat helemaal bovenaan het script en er komt niks vooraf:
De foutmelding die ik na het in typen van het correcte wachtwoord krijg is:
Warning: cannot modify header information - headers already sent by (output started at /home/famili1b/public_html/handlelogin.php:10) in /home/famili1b/public_html/handlelogin.php on line 52.
Ik snap niet goed waarom hij het wel lokaal doet en niet online. Mijn vraag is dan dus ook hoe ik dit oplos.
bvd tijmen
*edit excuses voor de onduidelijk leesbare scripts ..Ik heb alles nog even tussen gezet om het te verduidelijken voor dit forum.
<code> .. </code> werkt niet?
Gewijzigd op 02/07/2011 02:24:44 door Tijmen Amsing
Pas je handlelogin script aan zodat je eerst in php een check doet van je gebruikersnaam en wachtwoord en daarna pas iets output. Dus geen html genereren of iets printen(of echo) voordat je weet waar je naartoe gaat.
Dit script zoals het hier nu staat werkt zeker offline ook niet...
Waarom javascript windows.alert en windows.location en niet gewoon print 'error' en include 'login.php';
Ik ben pas begonnen met php en snap nog niet precies hoe ik het dan moet oplossen.
Mordachai Adams op 02/07/2011 07:38:34:
headers already sent wil zeggen dat er al output is op uw pagina en je dan wil doorgaan naar een andere pagina.
Ik snap niet waarom ik deze melding krijg als er in handlelogin.php helemaal geen headers wordt gebruikt? Daarbij: hij zegt dat de output gestart is op line 52; daar waar de cookie aangemaakt wordt.
Pas je handlelogin script aan zodat je eerst in php een check doet van je gebruikersnaam en wachtwoord en daarna pas iets output. Dus geen html genereren of iets printen(of echo) voordat je weet waar je naartoe gaat.
Dit script zoals het hier nu staat werkt zeker offline ook niet...
Mordachai Adams op 02/07/2011 07:38:34:
Waarom javascript windows.alert en windows.location en niet gewoon print 'error' en include 'login.php';
Ik deel je mening dat het een beetje omslachtig is heh. Ik maakte dit met mijn eerste kennis van php/js en het werkte voor mij. Als ik geen JS meer gebruik, zal het script dan wel werken?
Ik heb nu helemaal bovenin handlelogin.php 'setcookie("amsing","http://www.familieamsing.nl",time()+86400);' geschreven, en wanneer het wachtwoord fout is of er een ander probleem zich voordoet wordt de cookie weer verwijderd.
bedankt ;)
Ik zou aanraden om sessies te gebruiken, omdat cookies niet door iedereen worden geaccepteerd en omdat cookies ook kunnen worden gewijzigd door de gebruiker zelf.
Matthijs Veldhuizen op 03/07/2011 12:34:35:
Ik zou aanraden om sessies te gebruiken, omdat cookies niet door iedereen worden geaccepteerd en omdat cookies ook kunnen worden gewijzigd door de gebruiker zelf.
HAHAHAAHHA
Loser.
sessions maken gebruik van cookies!
(Tenzij je php verneukt hebt ingesteld dat het via de url moet, maar dan ben je echt lame.)
Commentaar geven op iemand is prima, maar iemand uitmaken voor loser slaat natuurlijk helemaal nergens op. Laat dit soort kinderlijk gedrag in de toekomst aub achterwege.
Ozzie PHP op 03/07/2011 13:45:53:
@Karl Karl:
Commentaar geven op iemand is prima, maar iemand uitmaken voor loser slaat natuurlijk helemaal nergens op. Laat dit soort kinderlijk gedrag in de toekomst aub achterwege.
Commentaar geven op iemand is prima, maar iemand uitmaken voor loser slaat natuurlijk helemaal nergens op. Laat dit soort kinderlijk gedrag in de toekomst aub achterwege.
Nee hoor. Als je niet weet waar je het over hebt en doet alsof je dat wel weet en dan nog zo'n stomme fout maakt, dan ben je best wel een loser.
Dan hoef je nog steeds niet iemand publiekelijk uit te maken voor loser. Je kunt dan ook gewoon zeggen dat zijn opmerking niet klopt.
Ozzie PHP op 03/07/2011 13:58:12:
Dan hoef je nog steeds niet iemand publiekelijk uit te maken voor loser. Je kunt dan ook gewoon zeggen dat zijn opmerking niet klopt.
Nee.
Loser is tenminste duidelijke taal.
Het is de zoveelste onzin / gevaarlijke / verkeerde post van hem...
Je had gewoon kunnen zeggen dat wat hij zegt niet klopt. En je had er ook nog bij kunnen zeggen dat hij voortaan moet opletten met wat hij zegt ivm veiligheid. Da's allemaal prima. Loser gaat echter net even een stapje te ver. Ik geloof best dat je het goed bedoelt, maar laten we het hier gewoon netjes houden.
Overigens, als je vindt dat iemand continue verkeerde / gevaarlijke informatie geeft, stuur dan even een berichtje naar meldpunt moderatie (via privé berichten) en maak daar melding van. Zij zullen dan actie ondernemen. Dit werkt goed.
Ozzie PHP op 03/07/2011 14:12:31:
Iemand een loser noemen is een vorm van disrespect.
Klopt. Ik heb ook geen respect voor hem. En dat hoef ik ook niet te hebben.
Ozzie PHP op 03/07/2011 14:12:31:
Je had gewoon kunnen zeggen dat wat hij zegt niet klopt.
Doe ik ook. Alleen hier niet.
Ozzie PHP op 03/07/2011 14:12:31:
En je had er ook nog bij kunnen zeggen dat hij voortaan moet opletten met wat hij zegt ivm veiligheid. Da's allemaal prima.
Ik denk dat dit effectiever is.
Ozzie PHP op 03/07/2011 14:12:31:
Loser gaat echter net even een stapje te ver.
Wat mij betreft niet.
Ozzie PHP op 03/07/2011 14:12:31:
Ik geloof best dat je het goed bedoelt, maar laten we het hier gewoon netjes houden.
Ik beslis zelf wat ik post. Jij niet.
Ozzie PHP op 03/07/2011 14:12:31:
Overigens, als je vindt dat iemand continue verkeerde / gevaarlijke informatie geeft, stuur dan even een berichtje naar meldpunt moderatie (via privé berichten) en maak daar melding van.
Je hebt blijkbaar geen idee hoeveel meldingen ik doe.
Ozzie PHP op 03/07/2011 14:12:31:
Zij zullen dan actie ondernemen. Dit werkt goed.
Echt niet. Zijn zelf ook losers.
@Tijmen: je bent welkom om een nieuw topic te openen...