SESSION fout
zit met het volgende probleem:
Heb een login script op basis van
een session_register:
na het invullen van loging/pwd verwijst
het door naar checklogin.php
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
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
<?php
ob_start();
$host="localhost"; // Host name
$username="***"; // Mysql username
$password="***"; // Mysql password
$db_name="***"; // Database name
$tbl_name="member"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// encrypt password
$encrypted_mypassword=sha1($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
session_register("myusername");
session_register("mypassword");
header("location:../index.php?page=intro");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>
ob_start();
$host="localhost"; // Host name
$username="***"; // Mysql username
$password="***"; // Mysql password
$db_name="***"; // Database name
$tbl_name="member"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// encrypt password
$encrypted_mypassword=sha1($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
session_register("myusername");
session_register("mypassword");
header("location:../index.php?page=intro");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>
Tot hier geen probleem maar zit een beetje in de knoei
met de session_start().
op de index.php zelf heb ik volgende code bovenaan gezet:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
session_start();
if(!session_is_registered('myusername')){
header("location:../index.php?page=intro");
}
else header("location:../test.php");
?>
session_start();
if(!session_is_registered('myusername')){
header("location:../index.php?page=intro");
}
else header("location:../test.php");
?>
Telkens na login gaat hij naar de test.php, ik doe blijkbaar iets
verkeerd want ik interpreteer dit als de session er is ga verder naar
index.php?page=intro anders ga naar test.php
Waar zit ik fout met mijn redenering ?
thanks alvast,
Yannick
session_is_registered('myusername')
session_register();
deze zijn al zo verouderd, dat ze tegenwoordig bijna niet meer te gebruikem meer zijn.
Verdiep je liever eens in $_SESSION ...
Ook is het raadzaam je te verdiepen in SQL-injection en foutafhandeling (zie de tutorials). Variabelen buiten quotes plaatsen is bovendien ook erg handig.
Gewijzigd op 23/06/2011 10:37:23 door - Ariën -
de ob_* functies verbergen fouten in je opzet. Het is veel beter om de problemen op te lossen i.p.v. ze te verbergen.
sessions_is_registered en session_register zijn antiek.
Je kunt $_SESSION['variabelenaam'] = $variabele; om een waarde te zetten.
En isset($_SESSION['varaibelenaam']) om te kijken of iets in de sessie staat.
Verder heb je te maken met SQL injection en hoor je warnings te krijgen op je post variabelen.
Probeer eerst de sessie functies om te zetten en dit bovenaan je code te plaatsen.
Inderdaad $_session had ik ondertussen al gevonden en heb dus de checklogin aangepast naar:
Code (php)
en de index.php naar:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
session_start();
if(isset($_SESSION['myusername'])){
header("location:../index.php?page=input_crew");
}
else {
header("location:../login/main_login.php");
}
?>
error_reporting(E_ALL);
ini_set('display_errors',1);
session_start();
if(isset($_SESSION['myusername'])){
header("location:../index.php?page=input_crew");
}
else {
header("location:../login/main_login.php");
}
?>
Hij blijft echter telkens terug naar de main_login.php gaan
en ook geen foutmeldingen.
De SQL injection ben ik op de hoogte maar ga me hier wat verder op verdiepen
als ik het eerst aan de praat krijg, de site draait op een volledig intern
netwerk.
Wat de variabelen buiten de quotes betreft telkens als ik dit doe
geeft hij hier fouten op vandaar dat ik ze binnen de quotes telkens zet.
Code (php)
1
2
3
4
2
3
4
<?php
$_SESSION['myusername'] = $_POST['myusername'];
$_SESSION['mypassword'] = $_POST['mypassword'];
?>
$_SESSION['myusername'] = $_POST['myusername'];
$_SESSION['mypassword'] = $_POST['mypassword'];
?>
Quote:
De SQL injection ben ik op de hoogte maar ga me hier wat verder op verdiepen
als ik het eerst aan de praat krijg, de site draait op een volledig intern
netwerk.
als ik het eerst aan de praat krijg, de site draait op een volledig intern
netwerk.
Zet je ook altijd pas later sloten op je deur?
Mijn advies: Doe dat liever meteen, anders vergeet je het.
Voor de SQL injectie, bedoelde eerder van 1 probleem tegelijk oplossen, ben redelijk nieuw met dit alles en anders verlies ik het overzicht een beetje.
Heb het voor de zekerheid maar erin gezet met jouw POST maar no luck.
Zou het misschien kunnen komen dat ik in de checklogin.php zeg
van
Code (php)
en dit op de index pagina natuurlijk nog eens doe?
je hebt wel session_start(); bovenaan aan staan?
@ Aar: die staat inderdaad op lijn 1 van de index.php
Wat krijg je als je $_SESSION['myusername'] echoéd in print_r() ?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
session_start();
if(isset($_SESSION['myusername'])){
header("location:../index.php?page=intro");
}
else {
header("location:../login/main_login.php");
}
?>
error_reporting(E_ALL);
ini_set('display_errors',1);
session_start();
if(isset($_SESSION['myusername'])){
header("location:../index.php?page=intro");
}
else {
header("location:../login/main_login.php");
}
?>
Heb je wel een session start voordat die checklogin wordt aangeroepen (ik zie niet waar je die include)
checklogin.php ( met dan de $_SESSION en MySQL injectie )
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
session_start();
ob_start();
$host="localhost";
$username="admin";
$password="admin";
$db_name="request";
$tbl_name="member";
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$encrypted_mypassword=sha1($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $encrypted_mypassword;
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>
session_start();
ob_start();
$host="localhost";
$username="admin";
$password="admin";
$db_name="request";
$tbl_name="member";
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$encrypted_mypassword=sha1($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $encrypted_mypassword;
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>
Wanneer je verkeerde paswoord ingeeft geeft hij de juiste echo "Wrong..." weer.
Nu zou hij dus moeten doorgaan naar login_success.php als ik het goede paswoord in geef...
login_success.php:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
session_start();
if(isset($_SESSION['myusername'])){
header("location:main_login.php");
}
?>
session_start();
if(isset($_SESSION['myusername'])){
header("location:main_login.php");
}
?>
<html>
<body>
Login Successful
</body>
</html>
In plaats van te zeggen Login Succesful gaat hij telkens opnieuw naar de main_login.php pagina.
Wanneer ik een doe geeft hij mijn correcte myusername weer.
Het kan niet anders zijn dat dit een klein foutje ergens is maar ik zie het maar
niet iemand een idee?
thanks,
Yannick
Toevoeging op 26/06/2011 11:24:39:
Heb iets gevonden snap het alleen niet goed:
als ik login succesful.php de header verander naar test.php
dan gaat hij ook naar test.php
wanneer ik de header verander naar index.php?page=intro
dan gaat hij om een of andere reden terug naar mail_login.php
Het blijft toch maar een url dus waarom wel bij de eene en niet bij de andere?
thanks
Yannick Bogaert op 26/06/2011 11:18:11:
Ok dus heb de code al aangepast naar het volgende:
checklogin.php ( met dan de $_SESSION en MySQL injectie )
Wanneer je verkeerde paswoord ingeeft geeft hij de juiste echo "Wrong..." weer.
Nu zou hij dus moeten doorgaan naar login_success.php als ik het goede paswoord in geef...
login_success.php:
<html>
<body>
Login Successful
</body>
</html>
In plaats van te zeggen Login Succesful gaat hij telkens opnieuw naar de main_login.php pagina.
Wanneer ik een doe geeft hij mijn correcte myusername weer.
Het kan niet anders zijn dat dit een klein foutje ergens is maar ik zie het maar
niet iemand een idee?
thanks,
Yannick
checklogin.php ( met dan de $_SESSION en MySQL injectie )
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
session_start();
ob_start();
$host="localhost";
$username="admin";
$password="admin";
$db_name="request";
$tbl_name="member";
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$encrypted_mypassword=sha1($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $encrypted_mypassword;
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>
session_start();
ob_start();
$host="localhost";
$username="admin";
$password="admin";
$db_name="request";
$tbl_name="member";
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$encrypted_mypassword=sha1($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $encrypted_mypassword;
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>
Wanneer je verkeerde paswoord ingeeft geeft hij de juiste echo "Wrong..." weer.
Nu zou hij dus moeten doorgaan naar login_success.php als ik het goede paswoord in geef...
login_success.php:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
session_start();
if(isset($_SESSION['myusername'])){
header("location:main_login.php");
}
?>
session_start();
if(isset($_SESSION['myusername'])){
header("location:main_login.php");
}
?>
<html>
<body>
Login Successful
</body>
</html>
In plaats van te zeggen Login Succesful gaat hij telkens opnieuw naar de main_login.php pagina.
Wanneer ik een doe geeft hij mijn correcte myusername weer.
Het kan niet anders zijn dat dit een klein foutje ergens is maar ik zie het maar
niet iemand een idee?
thanks,
Yannick
Ten 1e waarom dit?: mysql_connect("$host", "$username", "$password")or die("cannot connect");
Waarom niet zo: mysql_connect($host, $username, $password)or die("cannot connect");
Als je alleen maar een variable in een parameter zet zet er dan geen " omheen, dat ik compleet nutteloos.
Ten 2e waarom gebruik je ob_start e.d.? Gebruik session gewoon op de goede manier.. Dus geen output voor je PHP code ipv ob_start.
Ten 3e stop met het herdefineren van je variables.. Als je al een variable hebt waarom zou je dan dezelfde variable opnieuw defineren met een andere naam? Dat is compleet nutteloos.. Dus ipv dit:
naar dit:
En misschien handig om een beetje "netjes" te scripten? Dus een spatie voor een = teken en weet ik veel.