Admin Session
ik heb nou deze tutorial doorgelezen, en ik snap hoe je er eentje moet start enzo.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<!-- form beveiligd met IP en ISP check. -->
<?php
$pass = htmlentities($_POST['wachtwoord']);
$adminsetpass = "mijnwachtwoord"
if($pass == $adminsetpass){
session_start();
$_SESSION['admin'] = "true";
?>
<?php
$pass = htmlentities($_POST['wachtwoord']);
$adminsetpass = "mijnwachtwoord"
if($pass == $adminsetpass){
session_start();
$_SESSION['admin'] = "true";
?>
en dan op iedere pagina
Code (php)
Maar nu is mijn vraag, blijft die session iedere keer aan of moet ik die telkens starten? en hoe zorg ik dat als ik de pagina verlaat, dat dan de session wordt unset, of gebeurt dat automatisch?
htmlentities, je gaat het password wat de gebruiker ingevoerd heeft toch niet tonen :-S.
Zie session_start en session_destroy en session.
Waarvoor Zie session_start en session_destroy en session.
Karl Karl op 19/08/2010 11:49:28:
Waarvoor htmlentities, je gaat het password wat de gebruiker ingevoerd heeft toch niet tonen :-S.
Zie session_start en session_destroy en session.
Zie session_start en session_destroy en session.
Als iemand toch het form berijkt, kan ie makkelijk een script ipv het wachtwoord doen. Dus kans op hack :o Hey daar is over na gedacht!
Toevoeging op 19/08/2010 11:57:52:
En nou heb ik op PHP.net gekeken, maar ik snap het niet: Moet je telkens aan het begin van de pagina Session_start() doen, en aan het einde telkens session_destroy(), maar blijf ik dan wel ingelogd?
Ook staat er dat je op IP controleert, betekend dit dat als ik bij een hosting met een IP-Farm zit, dat ik me dan nooit kan inloggen omdat ik bij elke request een ander IP heb?
Zolang je session_start op iedere pagina uitvoert, blijft je sessie bestaan. Sluit je de pagina (maar niet de browser) dan blijft de sessie bestaan, sluit je de browser, dan is je sessie weg, (of eigenlijk, hij bestaat nog wel, maar je browser begint een nieuwe omdat de cookie met de sessie id verdwijderd is toen de browser gesloten werd)
Doe je 30 minuten niks, dan is je sessie ook voorbij.
Johan Dam op 19/08/2010 12:02:10:
Je pakt het wachtwoord en vergelijkt het, ik gok dat je het daarna weg gooit. Enig script kan dus nooit uitgevoerd worden (of je wachtwoord moet een script zijn, dan heb je nog een hele kleine kans)
Ook staat er dat je op IP controleert, betekend dit dat als ik bij een hosting met een IP-Farm zit, dat ik me dan nooit kan inloggen omdat ik bij elke request een ander IP heb?
Zolang je session_start op iedere pagina uitvoert, blijft je sessie bestaan. Sluit je de pagina (maar niet de browser) dan blijft de sessie bestaan, sluit je de browser, dan is je sessie weg, (of eigenlijk, hij bestaat nog wel, maar je browser begint een nieuwe omdat de cookie met de sessie id verdwijderd is toen de browser gesloten werd)
Doe je 30 minuten niks, dan is je sessie ook voorbij.
Ook staat er dat je op IP controleert, betekend dit dat als ik bij een hosting met een IP-Farm zit, dat ik me dan nooit kan inloggen omdat ik bij elke request een ander IP heb?
Zolang je session_start op iedere pagina uitvoert, blijft je sessie bestaan. Sluit je de pagina (maar niet de browser) dan blijft de sessie bestaan, sluit je de browser, dan is je sessie weg, (of eigenlijk, hij bestaat nog wel, maar je browser begint een nieuwe omdat de cookie met de sessie id verdwijderd is toen de browser gesloten werd)
Doe je 30 minuten niks, dan is je sessie ook voorbij.
Dus ik moet gewoon:
?
Dalando De Zuil op 19/08/2010 11:54:24:
Als iemand toch het form berijkt, kan ie makkelijk een script ipv het wachtwoord doen. Dus kans op hack :o Hey daar is over na gedacht!
Karl Karl op 19/08/2010 11:49:28:
Waarvoor htmlentities, je gaat het password wat de gebruiker ingevoerd heeft toch niet tonen :-S.
Zie session_start en session_destroy en session.
Zie session_start en session_destroy en session.
Als iemand toch het form berijkt, kan ie makkelijk een script ipv het wachtwoord doen. Dus kans op hack :o Hey daar is over na gedacht!
Zolang je geen data naar de gebruiker stuurt is er niks aan de hand. Pas als je data die een gebruiker heeft geleverd naar de browser c.q. gebruiker wordt gestuurd moet je htmlentities o.i.d. gebruiken.
Een passwoord TOON JE NOOIT OF TE NIMMER dus hoef je er geen beveiliging op te doen.
En dat sessions gedoe staat heel duidelijk uitgelegd op php.net. Dat kan je écht niet in vijf minuten allemaal doorgelezen hebben.
$_SESSION = array(); // alle gegevens wissen
session_destroy(); // sessie vernietigen
header("Location: home/of/waar/dan.ook"); // doorsturen om van alle rest-data af te komen;
die; // geen extra content meer versturen, de gebruiker word toch doorgestuurd dus waarom bandwidth / executie-tijd verspillen?
Ik werk met het systeem dat op iedere pagina header.php en footer.php wordt geinclude, daartussen de content.
Dit staat in header.php:
Code (php)
De code die op de sessie start pagina staat:
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
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
<?php
include 'header.php';
$ip = $_SERVER['REMOTE_ADDR'];
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$pass = $_POST['pass'];
$adminsetpass = "MijnWachtwoord";
if($ip = "MijnIP"){
if($hostname = "MijnISP"){
echo '<form action="" method="post">
<input type="password" name="pass">
<input type="submit" value="sumbit"><br>
';
}
else
{
echo 'Hostname klopt niet!';
}
}
else
{
echo 'ip klopt niet!';
}
if($_SERVER['REQUEST_METHOD'] == "POST"){
if($pass == $adminsetpass){
session_start();
$_SESSION['admin'] = "true";
echo 'Done';
}
else
{
echo 'wachtwoord klopt niet!';
}
}
include 'footer.php';
?>
include 'header.php';
$ip = $_SERVER['REMOTE_ADDR'];
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$pass = $_POST['pass'];
$adminsetpass = "MijnWachtwoord";
if($ip = "MijnIP"){
if($hostname = "MijnISP"){
echo '<form action="" method="post">
<input type="password" name="pass">
<input type="submit" value="sumbit"><br>
';
}
else
{
echo 'Hostname klopt niet!';
}
}
else
{
echo 'ip klopt niet!';
}
if($_SERVER['REQUEST_METHOD'] == "POST"){
if($pass == $adminsetpass){
session_start();
$_SESSION['admin'] = "true";
echo 'Done';
}
else
{
echo 'wachtwoord klopt niet!';
}
}
include 'footer.php';
?>
Maar als het zou werken zou ik als mijn sessie start, ik het rode blok al moeten zien, Nope. Niet. Help?
je start je sessie 1x, daarna niet meer. Dus heb je er niks aan.
session_start() bovenin je header.php zetten.
Als je niet bent ingelogged bestaat $_SESSION['admin'] helemaal niet, daar dus op controleren.
Heb je error_reporting wel aan staan? Dit script genereerd minstens sowieso de 2 bovenstaande notice errors, niet netjes.
Gewijzigd op 19/08/2010 12:48:30 door Johan Dam
*zucht* session_start(); moet boven de pagina en vervolgens de sessie aanmaken in de if
Dalando De Zuil op 19/08/2010 11:54:24:
Als iemand toch het form berijkt, kan ie makkelijk een script ipv het wachtwoord doen. Dus kans op hack :o Hey daar is over na gedacht!
Toevoeging op 19/08/2010 11:57:52:
En nou heb ik op PHP.net gekeken, maar ik snap het niet: Moet je telkens aan het begin van de pagina Session_start() doen, en aan het einde telkens session_destroy(), maar blijf ik dan wel ingelogd?
Karl Karl op 19/08/2010 11:49:28:
Waarvoor htmlentities, je gaat het password wat de gebruiker ingevoerd heeft toch niet tonen :-S.
Zie session_start en session_destroy en session.
Zie session_start en session_destroy en session.
Als iemand toch het form berijkt, kan ie makkelijk een script ipv het wachtwoord doen. Dus kans op hack :o Hey daar is over na gedacht!
Toevoeging op 19/08/2010 11:57:52:
En nou heb ik op PHP.net gekeken, maar ik snap het niet: Moet je telkens aan het begin van de pagina Session_start() doen, en aan het einde telkens session_destroy(), maar blijf ik dan wel ingelogd?
Hahaha :D En dan ook "Hey daar is over na gedacht!"
Ik heb ook weer goed gelachen, bedankt Dalando!
Edit:
Oh, en: wat moet ik me voorstellen bij een "ISP Check" ?
Gewijzigd op 19/08/2010 12:50:04 door niek s
Bovenaan in header.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
session_start();
// Iets naar beneden net na de body tag
if(isset($_SESSION['admin'])){
if($_SESSION['admin'] == "true"){
echo '<div style="display:block; bottom:0; position:fixed; text-align: center; width: 900px; background-color:red; font-size:10px;">
<?php include "online.php"; ?>
</div>
';
}
}
?>
session_start();
// Iets naar beneden net na de body tag
if(isset($_SESSION['admin'])){
if($_SESSION['admin'] == "true"){
echo '<div style="display:block; bottom:0; position:fixed; text-align: center; width: 900px; background-color:red; font-size:10px;">
<?php include "online.php"; ?>
</div>
';
}
}
?>
en bij het form:
Quote:
Oh, en: wat moet ik me voorstellen bij een "ISP Check" ?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
if($hostname == "hier-vul-ik-zelf-mijn-ISP-In"){
// wel mijn ISP
}
else
{
// niet mijn isp
}
?>
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
if($hostname == "hier-vul-ik-zelf-mijn-ISP-In"){
// wel mijn ISP
}
else
{
// niet mijn isp
}
?>
Gewijzigd op 19/08/2010 15:55:25 door Dalando De Zuil
Code (php)
1
2
3
4
2
3
4
echo '<div style="display:block; bottom:0; position:fixed; text-align: center; width: 900px; background-color:red; font-size:10px;">
<?php include "online.php"; ?>
</div>
';
<?php include "online.php"; ?>
</div>
';
Kijk ik nu verkeerd of doe je nu een in een echo?....
Maak dit er eens van.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
echo '<div style="display:block; bottom:0; position:fixed; text-align: center; width: 900px; background-color:red; font-size:10px;">';
include("online.php");
echo '</div>
';
include("online.php");
echo '</div>
';
En test het script gewoon! kijk waarom je niks ziet, dus kijk of de sessie bestaat, kijk of de sessie true is en shit.
Gewijzigd op 19/08/2010 19:13:53 door Joakim Broden
Oetzie en mijn achternaam op 19/08/2010 19:13:33:
Kijk ik nu verkeerd of doe je nu een in een echo?....
Maak dit er eens van.
En test het script gewoon! kijk waarom je niks ziet, dus kijk of de sessie bestaat, kijk of de sessie true is en shit.
Code (php)
1
2
3
4
2
3
4
echo '<div style="display:block; bottom:0; position:fixed; text-align: center; width: 900px; background-color:red; font-size:10px;">
<?php include "online.php"; ?>
</div>
';
<?php include "online.php"; ?>
</div>
';
Kijk ik nu verkeerd of doe je nu een in een echo?....
Maak dit er eens van.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
echo '<div style="display:block; bottom:0; position:fixed; text-align: center; width: 900px; background-color:red; font-size:10px;">';
include("online.php");
echo '</div>
';
include("online.php");
echo '</div>
';
En test het script gewoon! kijk waarom je niks ziet, dus kijk of de sessie bestaat, kijk of de sessie true is en shit.
K nou heb ik dit:
Code (php)
Maar er gebeurt nog niks. Red box isnt here! Help?
Want weet je ook waarom de redbox niet verschijnt, omdat de redbox misschien leeg is waardoor die geen hoogte heeft en dus niet verschijnt.
Dus is de include wel goed? is online.php wel goed?
Wat ook kan zijn dat de div verkeerd gepositioneerd staat met z-index, position fixed etc etc, testen testen testen testn. En luisteren naar anderen wat die zeggen, leer je het meest van.
probeer dit eens:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
if(isset($_SESSION['admin'])){
echo 'Sessie isset';
if($_SESSION['admin'] == "true"){
echo 'Sessie isset en true';
}
}
echo 'Sessie isset';
if($_SESSION['admin'] == "true"){
echo 'Sessie isset en true';
}
}
Zie je 1 van die 2 echo's terug in je broncode weet je dat het niet aan de sessie's ligt maar aan je div/include.
En krijg je nergens foutmeldingen ofzo?
Gewijzigd op 19/08/2010 19:45:59 door Joakim Broden
Heb je nouw al heel php.net doorgelezen?
Oetzie en mijn achternaam op 19/08/2010 19:45:19:
is online.php wel goed?
Daar lag het dus aan, ik had in online.php session_start() wat dus alles om zeep hielp.
Het werkt nu bedankt!
.
Gewijzigd op 19/08/2010 23:32:52 door Dalando De Zuil