sessions werken niet!
Ik krijg mijn sessions niet aan de praat en ik weet niet wat ik fout doe.
Ik heb 3 bestanden: registreer.php, login.php en profiel.php (ze beginnen allemaal met de regel session_start();
In login.php is er een query die kijkt of de ingevoerde formdata klopt, en maakt een sessie. Om dit te controleren staat hier bovenaan in het bestand (tijdelijk, na session_start();):
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if (isset($_SESSION['id'])) {
print 'LOGIN.PHP: SESSIE ID GEMAAKT, INGELOGD!';
exit();
} else {
print 'LOGIN.PHP: GEEN SESSIE ID, NIET INGELOGD!';
// exit();
}
print 'LOGIN.PHP: SESSIE ID GEMAAKT, INGELOGD!';
exit();
} else {
print 'LOGIN.PHP: GEEN SESSIE ID, NIET INGELOGD!';
// exit();
}
Aangezien de gebruiker enkel profiel.php mag zien wanneer hij ingelogd is, heb ik dit soort "if" nodig.
Om te testen bij profiel.php, staat hier bovenaan in het bestand (ook tijdelijk, na session_start();
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if (!(isset($_SESSION['id']))) {
print 'PROFIEL.PHP: GEEN SESSION ID: NIET INGELOGD!';
exit();
} else {
print 'PROFIEL PHP: SESSION ID: INGELOGD!';
exit();
}
print 'PROFIEL.PHP: GEEN SESSION ID: NIET INGELOGD!';
exit();
} else {
print 'PROFIEL PHP: SESSION ID: INGELOGD!';
exit();
}
En ook bij registreer.php:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if (isset($_SESSION['id'])) {
print 'REGISTREER.PHP: INGELOGD!';
exit();
} else {
print 'REGISTREER.PHP: NIET INGELOGD!';
exit();
}
print 'REGISTREER.PHP: INGELOGD!';
exit();
} else {
print 'REGISTREER.PHP: NIET INGELOGD!';
exit();
}
De session id registreren in login.php werkt, bij refresh zegt hij dan ook dat ik ingelogd ben. Echter profiel.php en registreer.php zeggen dat ik NIET ingelogd ben. Ik weet echt niet wat ik fout doe. Alle pagina's beginnen met
Quote:
. Weet iemand het?session_start();
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken i.p.v. quote-tags. Deze zijn bedoeld voor citeren van teksten..
Gewijzigd op 25/12/2013 01:40:37 door - Ariën -
Even een andere opmerking. De manier waarop je je pagina's nu beveiligt is zeer onveilig. Is dit tijdelijke code?
Bedankt voor de tip, ik ben nog maar net begonnen met php. Hoe zou ik dit veiliger kunnen maken?
Ja, maar de vraag was of je de code even wil laten zien.
>> Bedankt voor de tip, ik ben nog maar net begonnen met php. Hoe zou ik dit veiliger kunnen maken?
Je controleert nu alleen maar of er een ID bestaat. Je controleert niet wat de inhoud is. Dat lijkt me niet heel veilig.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$query = mysqli_query($connectie,"SELECT * FROM users WHERE emailaddress='$emailaddress' AND password='$password' AND actief='1'");
$login_check = mysqli_num_rows($query);
if ($login_check > 0) {
while ($row = mysqli_fetch_array($query)) {
// session status
$_SESSION['status'] = 'logedin';
// user id naar session
$uid = $row['uid'];
$_SESSION['id'] = $uid;
// username naar session
$username = $row['username'];
$_SESSION['username'] = $username;
// normaal zou dit hieronder een redirect zijn, maar totdat het werkt heb ik het even vervangen
print 'De sessie is gemaakt.';
exit();
} else {
$errormessage = 'Foute data. Probeer opnieuw.';
}
$login_check = mysqli_num_rows($query);
if ($login_check > 0) {
while ($row = mysqli_fetch_array($query)) {
// session status
$_SESSION['status'] = 'logedin';
// user id naar session
$uid = $row['uid'];
$_SESSION['id'] = $uid;
// username naar session
$username = $row['username'];
$_SESSION['username'] = $username;
// normaal zou dit hieronder een redirect zijn, maar totdat het werkt heb ik het even vervangen
print 'De sessie is gemaakt.';
exit();
} else {
$errormessage = 'Foute data. Probeer opnieuw.';
}
Gewijzigd op 25/12/2013 01:41:09 door - Ariën -
Er kan een hoop aan verbeterd worden, maar ik duik zo m'n bed in. Morgen zullen er wel mensen zijn die je wat tips kunnen geven.
En voor de exit een var_dump($_SESSION);
Isset geeft ook false als je var "leeg" is
Http://php.net/isset
Toevoeging op 25/12/2013 10:05:37:
Ik heb een echo toegevoegd aan de 3 bestanden, zodat ze de session id, username en status echo-en.
Op login.php doet hij dat ook, met de correcte gegevens.
De sessie wordt dus gecreërd maar om één of andere reden wordt deze sessie niet overgenomen in de andere bestanden? Het lijkt net alsof de sessie pagina gebonden is.
Gewijzigd op 25/12/2013 10:08:42 door Jony V
Wat wij dumpen noemen met de betekenis van iets weggooien, betekent in de programmeerwereld de inhoud van een variabele, functie ergens opslaan of op het scherm tonen.
En geeft echo session_id(); op alle scripts dezelfde waarde?
Enkel bij login.php staan de (correcte) gegevens, bij de andere bestanden staat er niets, is het leeg.
Als ik kijk naar login.php zie ik nergens dat je (automatisch) verwijst naar profiel.php
Even een vraagje: als er op profiel.php session_start(); staat, maakt het dan uit of je hier automatisch naar doorgestuurd word?
Gewijzigd op 25/12/2013 18:03:45 door Jony V
En laat eens een compleet bestandje zien die niet werkr.
Sessions zijn namelijk helemaal niet moeilijk.
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
71
72
73
74
75
76
77
78
79
80
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
71
72
73
74
75
76
77
78
79
80
<?php
// LOGIN.PHP
session_start();
// redirect als user al ingelogd is
if ((isset($_SESSION['id'])) && ($_SESSION['id']!='')) {
header("Location: profiel.php");
exit();
}
// connectie met database
require_once 'connectie.php';
// login form data
if (isset($_POST['emailaddress'])) {
$emailaddress = preg_replace("/[^@.\/\A-Za-z0-9_]/","", $_POST['emailaddress']);
$password = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['password']);
$password = hash("sha512", $password);
// errormessage
$errormessage = '';
if (!$emailaddress) {
$errormessage = 'Please fill in your email address.';
}
else if (!$password) {
$errormessage = 'Please fill in your password.';
}
$query = mysqli_query($connectie,"SELECT * FROM users WHERE emailaddress='$emailaddress' AND password='$password' AND actief='1'");
$login_check = mysqli_num_rows($query);
if ($login_check > 0) {
while ($row = mysqli_fetch_array($query)) {
$_SESSION['status'] = 'signedin';
$uid = $row['uid'];
$_SESSION['id'] = $uid;
$username = $row['username'];
$_SESSION['username'] = $username;
header("Location: profiel.php");
exit();
}
} else {
$errormessage = 'Incorrect data. Please try again.';
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/style/css/style.css" rel="stylesheet" type="text/css" />
<title>Login</title>
</head>
<body>
<div class="section">
<div class="main-wrap">
<?php echo $errormessage; ?>
<form action="login.php" method="post" enctype="multipart/form-data">
<label>Email address</label>
<input name="emailaddress" type="text" value="<?php echo $emailaddress; ?>" />
<label>Password</label>
<input name="password" type="password" />
<input name="submit" type="submit" value"Send" />
</form>
</div>
</div>
</body>
</html>
// LOGIN.PHP
session_start();
// redirect als user al ingelogd is
if ((isset($_SESSION['id'])) && ($_SESSION['id']!='')) {
header("Location: profiel.php");
exit();
}
// connectie met database
require_once 'connectie.php';
// login form data
if (isset($_POST['emailaddress'])) {
$emailaddress = preg_replace("/[^@.\/\A-Za-z0-9_]/","", $_POST['emailaddress']);
$password = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['password']);
$password = hash("sha512", $password);
// errormessage
$errormessage = '';
if (!$emailaddress) {
$errormessage = 'Please fill in your email address.';
}
else if (!$password) {
$errormessage = 'Please fill in your password.';
}
$query = mysqli_query($connectie,"SELECT * FROM users WHERE emailaddress='$emailaddress' AND password='$password' AND actief='1'");
$login_check = mysqli_num_rows($query);
if ($login_check > 0) {
while ($row = mysqli_fetch_array($query)) {
$_SESSION['status'] = 'signedin';
$uid = $row['uid'];
$_SESSION['id'] = $uid;
$username = $row['username'];
$_SESSION['username'] = $username;
header("Location: profiel.php");
exit();
}
} else {
$errormessage = 'Incorrect data. Please try again.';
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/style/css/style.css" rel="stylesheet" type="text/css" />
<title>Login</title>
</head>
<body>
<div class="section">
<div class="main-wrap">
<?php echo $errormessage; ?>
<form action="login.php" method="post" enctype="multipart/form-data">
<label>Email address</label>
<input name="emailaddress" type="text" value="<?php echo $emailaddress; ?>" />
<label>Password</label>
<input name="password" type="password" />
<input name="submit" type="submit" value"Send" />
</form>
</div>
</div>
</body>
</html>
Toevoeging op 25/12/2013 22:40:20:
Dit is registreer.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
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
// REGISTREER.PHP
session_start();
// Redirect als user al ingelogd is
if ((isset($_SESSION['id'])) && ($_SESSION!='')) {
header("Location: profiel.php");
exit();
}
// connectie
require_once "connectie.php";
if (isset($_POST['username'])) {
$username = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['username']);
$username = str_replace(' ', '', $username);
$realname = preg_replace('/[^A-Za-z\-]/', '', $_POST['realname']);
$emailaddress = preg_replace("/[^@.\/\A-Za-z0-9_]/","", $_POST['emailaddress']);
$password = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['password']);
// checking if everything is filled in
$errormessage = '';
if ((!$username) || (!$realname) || (!$emailaddress) || (!$password)) {
if (!$username) {
$errormessage = 'Please fill in your username.';
} else if (!$realname) {
$errormessage = 'Please fill in your real name.';
} else if (!$emailaddress) {
$errormessage = 'Please fill in your emailaddress.';
} else if (!$password) {
$errormessage = 'Please fill in your password.';
}
} else {
// kijken of dubbel
$query_username = mysqli_query($connectie, "SELECT uid FROM users WHERE username='$username' LIMIT 1");
$query_email = mysqli_query($connectie, "SELECT uid FROM users WHERE emailaddress='$emailaddress' LIMIT 1");
$username_dubbel = mysqli_num_rows($query_username);
$emailaddress_dubbel = mysqli_num_rows($query_email);
if ($username_dubbel > 0) {
$errormessage = 'This username is already taken.';
}
else if ($emailaddress_dubbel > 0) {
$errormessage = 'This emailaddress is already registered.';
}
else {
$hashedpass = hash("sha512", $password);
$user_query = mysqli_query($connectie, "INSERT INTO users (username, realname, emailaddress, usertype, active, password, signupdate)
VALUES ('$username', '$realname', '$emailaddress', 'contributor', '0', '$encryptedPassword', now())") or die (mysql_error());
$uid = mysqli_insert_id($connectie);
print 'Registered successfull';
exit();
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/style/css/style.css" rel="stylesheet" type="text/css" />
<title>Sign up</title>
</head>
<body>
<div class="section">
<div class="main-wrap">
<?php echo $errormessage; ?>
<form action="registreer.php" method="post" enctype="multipart/form-data">
<label>Username</label>
<input name="username" type="text" value="<?php echo $username; ?>" />
<label>Real name</label>
<input name="realname" type="text" value="<?php echo $realname; ?>" />
<label>Email address</label>
<input name="emailaddress" type="text" value="<?php echo $emailaddress; ?>" />
<label>Password</label>
<input name="password" type="password" value="<?php echo $password; ?>" />
<input type="submit" name="submit" value="Submit" />
</form>
</div>
</div>
</body>
</html>
// REGISTREER.PHP
session_start();
// Redirect als user al ingelogd is
if ((isset($_SESSION['id'])) && ($_SESSION!='')) {
header("Location: profiel.php");
exit();
}
// connectie
require_once "connectie.php";
if (isset($_POST['username'])) {
$username = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['username']);
$username = str_replace(' ', '', $username);
$realname = preg_replace('/[^A-Za-z\-]/', '', $_POST['realname']);
$emailaddress = preg_replace("/[^@.\/\A-Za-z0-9_]/","", $_POST['emailaddress']);
$password = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['password']);
// checking if everything is filled in
$errormessage = '';
if ((!$username) || (!$realname) || (!$emailaddress) || (!$password)) {
if (!$username) {
$errormessage = 'Please fill in your username.';
} else if (!$realname) {
$errormessage = 'Please fill in your real name.';
} else if (!$emailaddress) {
$errormessage = 'Please fill in your emailaddress.';
} else if (!$password) {
$errormessage = 'Please fill in your password.';
}
} else {
// kijken of dubbel
$query_username = mysqli_query($connectie, "SELECT uid FROM users WHERE username='$username' LIMIT 1");
$query_email = mysqli_query($connectie, "SELECT uid FROM users WHERE emailaddress='$emailaddress' LIMIT 1");
$username_dubbel = mysqli_num_rows($query_username);
$emailaddress_dubbel = mysqli_num_rows($query_email);
if ($username_dubbel > 0) {
$errormessage = 'This username is already taken.';
}
else if ($emailaddress_dubbel > 0) {
$errormessage = 'This emailaddress is already registered.';
}
else {
$hashedpass = hash("sha512", $password);
$user_query = mysqli_query($connectie, "INSERT INTO users (username, realname, emailaddress, usertype, active, password, signupdate)
VALUES ('$username', '$realname', '$emailaddress', 'contributor', '0', '$encryptedPassword', now())") or die (mysql_error());
$uid = mysqli_insert_id($connectie);
print 'Registered successfull';
exit();
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/style/css/style.css" rel="stylesheet" type="text/css" />
<title>Sign up</title>
</head>
<body>
<div class="section">
<div class="main-wrap">
<?php echo $errormessage; ?>
<form action="registreer.php" method="post" enctype="multipart/form-data">
<label>Username</label>
<input name="username" type="text" value="<?php echo $username; ?>" />
<label>Real name</label>
<input name="realname" type="text" value="<?php echo $realname; ?>" />
<label>Email address</label>
<input name="emailaddress" type="text" value="<?php echo $emailaddress; ?>" />
<label>Password</label>
<input name="password" type="password" value="<?php echo $password; ?>" />
<input type="submit" name="submit" value="Submit" />
</form>
</div>
</div>
</body>
</html>
Toevoeging op 25/12/2013 22:43:46:
en dit is profiel.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
38
39
40
41
42
43
44
45
46
47
48
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
<?php
// PROFIEL.PHP
session_start();
// connectie db
require_once 'connectie.php';
// controleren of user ingelogd is
if (isset($_SESSION['id'])) {
$uid = $_SESSION['id'];
$username = $_SESSION['username'];
}
else {
header ("Location: login.php");
exit();
}
$userquery = mysqli_query($connectie, "SELECT * FROM users WHERE uid='$uid'");
while ($userdata=mysqli_fetch_array($userquery)) {
$EmailAddress = $getUserData['emailaddress'];
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/style/css/style.css" rel="stylesheet" type="text/css" />
<title><?php echo $username; ?></title>
</head>
<body>
<div class="section">
<div class="main-wrap">
<h2><?php echo $username; ?></h2>
</div>
</div>
</body>
</html>
// PROFIEL.PHP
session_start();
// connectie db
require_once 'connectie.php';
// controleren of user ingelogd is
if (isset($_SESSION['id'])) {
$uid = $_SESSION['id'];
$username = $_SESSION['username'];
}
else {
header ("Location: login.php");
exit();
}
$userquery = mysqli_query($connectie, "SELECT * FROM users WHERE uid='$uid'");
while ($userdata=mysqli_fetch_array($userquery)) {
$EmailAddress = $getUserData['emailaddress'];
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/style/css/style.css" rel="stylesheet" type="text/css" />
<title><?php echo $username; ?></title>
</head>
<body>
<div class="section">
<div class="main-wrap">
<h2><?php echo $username; ?></h2>
</div>
</div>
</body>
</html>
Hierdoor zou je eigenlijk een foutmelding moeten krijgen bij session_start(); maar als de error_reporting uit staat dan krijg je die ook niet. Wat je kunt doen is je hele code kopiëren en in een NIEUW bestand plakken en opslaan. Dit doe je dan met een plain text editor zoals notepad.
http://www.w3.org/International/questions/qa-byte-order-mark
Gewijzigd op 25/12/2013 23:08:33 door Frank Nietbelangrijk
waarom verander je de invoer van de gebruikers?
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
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
<?php
$username = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['username']);
$username = str_replace(' ', '', $username);
$realname = preg_replace('/[^A-Za-z\-]/', '', $_POST['realname']);
$emailaddress = preg_replace("/[^@.\/\A-Za-z0-9_]/","", $_POST['emailaddress']);
$password = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['password']);
?>
[/php]
los van dat die str_replace op de username zinloos is, aangezien je 1 regel eerder vanalles incl spaties vervangen hebt door ''.
Jij accepteert dus in een username alleen maar de letters A tm Z (of de kleine versie), cijfers of de -.
Daar is niet echt iets mis mee, maar als iemand als username opgeeft "Jony V", dan haal jij stilzwijgend de spatie eruit en slaat dat op.
Dat betekent dus ook dat jij daar vanaf nu altijd rekening mee moet houden, als je iemand inlogt.
Daarnaast zal ook de username "Jony!!!#$%%V" bezet zijn.
Idem voor je emailadres.
alleen daar accepteer jij geen - in het mail adres. (ik weet nog hoe irritant dat 10 jaar geleden was toen ik me wilde aanmelden bij de KvK en daar ook geen - geaccepteerd werd. En [email protected] zou best een acceptabel adres lijken...
Nog los van de irritatie: als jij de invoer [email protected] opslaat als [email protected], dan kan snapt straks niemand waarom jony geen mail krijgt, tenzij hij ergens zelf de weggevallen - opmerkt.
zie ook http://www.pfz.nl/wiki/invoer-validatie/#regular-expressions-is-het-een-geldig-email-adres
Overigens controleer je nergens of de resulterende danwel de ingevoerd data niet leeg is: "" of " " kan ook ingevoerd zijn....
Password wederom. En dat terwijl het juist aan te raden is om in een password ook "rare" tekens op te nemen.
Vervolgens hash je het password, dus wat daar ook voor raars in zat: dat is nu zeker letters+cijfers.
---
Ik vermoed dat het te maken heeft met het feit dat jij verderop de aangepaste $username en $email onbeveiligd gebruikt:
<?php
$sql = "SELECT uid FROM users
WHERE username='$username'
LIMIT 1"
?>
Dat had natuurlijk kunnen zijn:
<?php
$sql = "SELECT uid FROM users
WHERE username='". mysql_real_escape_string($username) ."'
LIMIT 1"
?>
wat een doeltreffender beveiliging is dan gewoon lomp slopen.
(uiteraard ook voor je andere query's)
Op de plek waar je gegevens echo-t, mis jij htmlspecialchars()
<h2><?php echo htmlspecialchars($username); ?></h2>
value="<?php echo htmlspecialchars($emailaddress); ?>" />
---
maar waarom je session niet werkt, is me niet duidelijk.
$username = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['username']);
$username = str_replace(' ', '', $username);
$realname = preg_replace('/[^A-Za-z\-]/', '', $_POST['realname']);
$emailaddress = preg_replace("/[^@.\/\A-Za-z0-9_]/","", $_POST['emailaddress']);
$password = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['password']);
?>
[/php]
los van dat die str_replace op de username zinloos is, aangezien je 1 regel eerder vanalles incl spaties vervangen hebt door ''.
Jij accepteert dus in een username alleen maar de letters A tm Z (of de kleine versie), cijfers of de -.
Daar is niet echt iets mis mee, maar als iemand als username opgeeft "Jony V", dan haal jij stilzwijgend de spatie eruit en slaat dat op.
Dat betekent dus ook dat jij daar vanaf nu altijd rekening mee moet houden, als je iemand inlogt.
Daarnaast zal ook de username "Jony!!!#$%%V" bezet zijn.
Idem voor je emailadres.
alleen daar accepteer jij geen - in het mail adres. (ik weet nog hoe irritant dat 10 jaar geleden was toen ik me wilde aanmelden bij de KvK en daar ook geen - geaccepteerd werd. En [email protected] zou best een acceptabel adres lijken...
Nog los van de irritatie: als jij de invoer [email protected] opslaat als [email protected], dan kan snapt straks niemand waarom jony geen mail krijgt, tenzij hij ergens zelf de weggevallen - opmerkt.
zie ook http://www.pfz.nl/wiki/invoer-validatie/#regular-expressions-is-het-een-geldig-email-adres
Overigens controleer je nergens of de resulterende danwel de ingevoerd data niet leeg is: "" of " " kan ook ingevoerd zijn....
Password wederom. En dat terwijl het juist aan te raden is om in een password ook "rare" tekens op te nemen.
Vervolgens hash je het password, dus wat daar ook voor raars in zat: dat is nu zeker letters+cijfers.
---
Ik vermoed dat het te maken heeft met het feit dat jij verderop de aangepaste $username en $email onbeveiligd gebruikt:
<?php
$sql = "SELECT uid FROM users
WHERE username='$username'
LIMIT 1"
?>
Dat had natuurlijk kunnen zijn:
<?php
$sql = "SELECT uid FROM users
WHERE username='". mysql_real_escape_string($username) ."'
LIMIT 1"
?>
wat een doeltreffender beveiliging is dan gewoon lomp slopen.
(uiteraard ook voor je andere query's)
Op de plek waar je gegevens echo-t, mis jij htmlspecialchars()
<h2><?php echo htmlspecialchars($username); ?></h2>
value="<?php echo htmlspecialchars($emailaddress); ?>" />
---
maar waarom je session niet werkt, is me niet duidelijk.
andere browsers lijken gewoon goed te werken..
dus als iemand de oplossing heeft voor ie...
bij de settings aanpassen dus.
gebruik geen cookies...