Sessies, Cookies en Subdomeinen
Stukje code loginscript:
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
114
115
116
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
114
115
116
<?php
session_start();
ini_set("session.cookie_domain", ".domeinnaam.nl");
include '../../includes/connection.php';
include '../../includes/functions.php';
if (isset($_POST)) {
$profielnaam = mysql_prep($_POST['profielnaam']);
$wachtwoord = mysql_prep($_POST['wachtwoord']);
$enc_wachtwoord = sha1($wachtwoord);
if ($profielnaam != 'admin') {
if (!stristr($profielnaam, '@')) { // @ check
$query = "SELECT id FROM profielen WHERE profielnaam = '{$profielnaam}' AND wachtwoord = '{$enc_wachtwoord}' AND actief = 1 LIMIT 1";
$result_set = mysql_query($query);
if (mysql_num_rows($result_set)) {
$result = mysql_fetch_assoc($result_set);
$_SESSION['profielnaam'] = $profielnaam;
$_SESSION['wachtwoord'] = $enc_wachtwoord;
$_SESSION['user_id'] = $result['id'];
setcookie("Login[profielnaam]", $profielnaam, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[wachtwoord]", $enc_wachtwoord, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[user_id]", $result['id'], time()+31536000, "/",".domeinnaam.nl");
$query = "UPDATE profielen SET laatst_aangemeld = NOW() WHERE id = ".$result['id'];
mysql_query($query);
$query = "DELETE FROM module_guests_online WHERE ip = '".$_SERVER['HTTP_REFERER']."'";
mysql_query($query);
} else {
header('Location: ../../info.php?p=fout_login');
exit;
}
if (isset($_GET['redirect'])) {
header('Location: '.$_SERVER['HTTP_REFERER']);
} else {
header('Location: http://'.$profielnaam.'. domeinnaam.nl/');
}
} else { // @ check
$query = "SELECT id FROM profielen WHERE profielnaam = '{$profielnaam}' AND wachtwoord = '{$enc_wachtwoord}' AND actief = 1 LIMIT 1";
$result_set = mysql_query($query);
if (mysql_num_rows($result_set)) {
$result = mysql_fetch_assoc($result_set);
$_SESSION['profielnaam'] = $profielnaam;
$_SESSION['wachtwoord'] = $enc_wachtwoord;
$_SESSION['user_id'] = $result['id'];
setcookie("Login[profielnaam]", $profielnaam, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[wachtwoord]", $enc_wachtwoord, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[user_id]", $result['id'], time()+31536000, "/",".domeinnaam.nl");
$query = "UPDATE profielen SET laatst_aangemeld = NOW() WHERE id = ".$result['id'];
mysql_query($query);
header('Location: http://'.$profielnaam.'. domeinnaam.nl/');
} else {
header('Location: ../../info.php?p=fout_login');
exit;
}
}
} else {
if ($enc_wachtwoord == sha1('fotosh!!t_123')) {
$_SESSION['profielnaam'] = $profielnaam;
$_SESSION['wachtwoord'] = $enc_wachtwoord;
$_SESSION['user_id'] = 'admin';
setcookie("Login[profielnaam]", $profielnaam, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[wachtwoord]", $enc_wachtwoord, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[user_id]", 'admin', time()+31536000, "/",".domeinnaam.nl");
header('Location: ../../stats.php');
} else {
header('Location: ../../info.php?p=fout_login');
exit;
}
}
}
?>
session_start();
ini_set("session.cookie_domain", ".domeinnaam.nl");
include '../../includes/connection.php';
include '../../includes/functions.php';
if (isset($_POST)) {
$profielnaam = mysql_prep($_POST['profielnaam']);
$wachtwoord = mysql_prep($_POST['wachtwoord']);
$enc_wachtwoord = sha1($wachtwoord);
if ($profielnaam != 'admin') {
if (!stristr($profielnaam, '@')) { // @ check
$query = "SELECT id FROM profielen WHERE profielnaam = '{$profielnaam}' AND wachtwoord = '{$enc_wachtwoord}' AND actief = 1 LIMIT 1";
$result_set = mysql_query($query);
if (mysql_num_rows($result_set)) {
$result = mysql_fetch_assoc($result_set);
$_SESSION['profielnaam'] = $profielnaam;
$_SESSION['wachtwoord'] = $enc_wachtwoord;
$_SESSION['user_id'] = $result['id'];
setcookie("Login[profielnaam]", $profielnaam, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[wachtwoord]", $enc_wachtwoord, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[user_id]", $result['id'], time()+31536000, "/",".domeinnaam.nl");
$query = "UPDATE profielen SET laatst_aangemeld = NOW() WHERE id = ".$result['id'];
mysql_query($query);
$query = "DELETE FROM module_guests_online WHERE ip = '".$_SERVER['HTTP_REFERER']."'";
mysql_query($query);
} else {
header('Location: ../../info.php?p=fout_login');
exit;
}
if (isset($_GET['redirect'])) {
header('Location: '.$_SERVER['HTTP_REFERER']);
} else {
header('Location: http://'.$profielnaam.'. domeinnaam.nl/');
}
} else { // @ check
$query = "SELECT id FROM profielen WHERE profielnaam = '{$profielnaam}' AND wachtwoord = '{$enc_wachtwoord}' AND actief = 1 LIMIT 1";
$result_set = mysql_query($query);
if (mysql_num_rows($result_set)) {
$result = mysql_fetch_assoc($result_set);
$_SESSION['profielnaam'] = $profielnaam;
$_SESSION['wachtwoord'] = $enc_wachtwoord;
$_SESSION['user_id'] = $result['id'];
setcookie("Login[profielnaam]", $profielnaam, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[wachtwoord]", $enc_wachtwoord, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[user_id]", $result['id'], time()+31536000, "/",".domeinnaam.nl");
$query = "UPDATE profielen SET laatst_aangemeld = NOW() WHERE id = ".$result['id'];
mysql_query($query);
header('Location: http://'.$profielnaam.'. domeinnaam.nl/');
} else {
header('Location: ../../info.php?p=fout_login');
exit;
}
}
} else {
if ($enc_wachtwoord == sha1('fotosh!!t_123')) {
$_SESSION['profielnaam'] = $profielnaam;
$_SESSION['wachtwoord'] = $enc_wachtwoord;
$_SESSION['user_id'] = 'admin';
setcookie("Login[profielnaam]", $profielnaam, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[wachtwoord]", $enc_wachtwoord, time()+31536000, "/",".domeinnaam.nl");
setcookie("Login[user_id]", 'admin', time()+31536000, "/",".domeinnaam.nl");
header('Location: ../../stats.php');
} else {
header('Location: ../../info.php?p=fout_login');
exit;
}
}
}
?>
Stukje code logoff script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
ini_set("session.cookie_domain", ".domeinnaam.nl");
$_SESSION = array();
session_destroy();
//setcookie("Login", '', time()-3600);
setcookie("Login[profielnaam]", '', time()-3600, "/",".domeinnaam.nl");
setcookie("Login[wachtwoord]", '', time()-3600, "/",".domeinnaam.nl");
setcookie("Login[user_id]", '', time()-3600, "/",".domeinnaam.nl");
header("Location: ".$_SERVER['HTTP_REFERER']);
?>
session_start();
ini_set("session.cookie_domain", ".domeinnaam.nl");
$_SESSION = array();
session_destroy();
//setcookie("Login", '', time()-3600);
setcookie("Login[profielnaam]", '', time()-3600, "/",".domeinnaam.nl");
setcookie("Login[wachtwoord]", '', time()-3600, "/",".domeinnaam.nl");
setcookie("Login[user_id]", '', time()-3600, "/",".domeinnaam.nl");
header("Location: ".$_SERVER['HTTP_REFERER']);
?>
Stukje Cookie login welke op iedere pagina terugkomt:
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
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
<?php
if (isset($_COOKIE['Login']) && !isset($_SESSION['user_id'])) {
if ($_COOKIE['Login']['profielnaam'] != 'admin') {
$query = "SELECT id FROM profielen WHERE actief = 1 AND id = ".$_COOKIE['Login']['user_id'];
$result = mysql_query($query);
if (mysql_num_rows($result)) {
$_SESSION['user_id'] = $_COOKIE['Login']['user_id'];
$_SESSION['wachtwoord'] = $_COOKIE['Login']['wachtwoord'];
$_SESSION['profielnaam'] = $_COOKIE['Login']['profielnaam'];
$query = "UPDATE profielen SET laatst_aangemeld = NOW() WHERE id = ".$_SESSION['user_id'];
mysql_query($query);
$query = "DELETE FROM module_guests_online WHERE ip = '".$_SERVER['REMOTE_ADDR']."'";
mysql_query($query);
}
} else {
$_SESSION['user_id'] = $_COOKIE['Login']['user_id'];
$_SESSION['wachtwoord'] = $_COOKIE['Login']['wachtwoord'];
$_SESSION['profielnaam'] = $_COOKIE['Login']['profielnaam'];
}
}
?>
if (isset($_COOKIE['Login']) && !isset($_SESSION['user_id'])) {
if ($_COOKIE['Login']['profielnaam'] != 'admin') {
$query = "SELECT id FROM profielen WHERE actief = 1 AND id = ".$_COOKIE['Login']['user_id'];
$result = mysql_query($query);
if (mysql_num_rows($result)) {
$_SESSION['user_id'] = $_COOKIE['Login']['user_id'];
$_SESSION['wachtwoord'] = $_COOKIE['Login']['wachtwoord'];
$_SESSION['profielnaam'] = $_COOKIE['Login']['profielnaam'];
$query = "UPDATE profielen SET laatst_aangemeld = NOW() WHERE id = ".$_SESSION['user_id'];
mysql_query($query);
$query = "DELETE FROM module_guests_online WHERE ip = '".$_SERVER['REMOTE_ADDR']."'";
mysql_query($query);
}
} else {
$_SESSION['user_id'] = $_COOKIE['Login']['user_id'];
$_SESSION['wachtwoord'] = $_COOKIE['Login']['wachtwoord'];
$_SESSION['profielnaam'] = $_COOKIE['Login']['profielnaam'];
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Bas Matthee
session_unset() gebruiken?
Misschien moet je in je uitlog scipt nog Ik denk persoonlijk dat het met de cookies te maken heeft, want als ik uitlog, ben ik wel uigelogd op dat ene domein, maar zodra ik een eerder bekeken subdomein bezoek ben ik weer ingelogd. Heb het idee dat ie voor ieder subdomein een cookie aanmaakt..
bump?
Vanwaar die spatie? Ik denk dat dit de reden is dat hij het niet neemt en daardoor vastbijt op die ene subdomein..
Waarom sla je het pasword op in een cookie en in een sessie? Lijkt me echt nergens voor nodig.
btw, de spatie komt doordat ik mijn domeinnaam ff heb gereplaced alvorens het hier te posten. In het script dat ik gebruik komen die spaties niet voor. (foutje dus tijdens posten hier) - Scherp
Of je doet iets extreems fout ;)
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
OK, ga ik daar ff naar kijken, maar dan is mijn eigenlijke probleem nog niet mee opgelost. ;)
bump?
Ok, ik ben na wat debuggen tot de ontsdekking gekomen dat het niet aan de cookies ligt, maar aan de sessies. De cookie wordt netjes ongeldig gemaakt voor alle subdomeinen, maar de sessie blijven wel per subdomein bestaan. Gekgenoeg zou na $_SESSION = array(); alles weg moeten zijn, maar dat geldt alleen voor het subdomein waar ik op dat moment ben. Iemand enig idee hoe ik kan zorgen dat de sessions op overige subdomeinen ook afgesloten/onbruikbaar kunnen worden gemaakt?
Om dit te realiseren doe je als volgt:
- maak een tabel met sessies en daarin een veld met random code en een verwijzing naar de usertable
- als iemand is ingelogd maak je een nieuwe sessie met (unieke!) code en die sla je op in een cookie die op t hele domein bereikbaar is (.domeinnaam.nl)
- tijdens het laden van de pagina check je of er een cookie is met de code, probeer die code te matchen en je weet of iemand ingelogd is, en zoja..als wie.
- als iemand uitlogt verwijder je de code uit de database en ben je klaar