edit: opgelost. Voortaan session_id voor session_start()
(bedankt, gvdh
)
Hoi,
Ik zit hier met een vreemd probleem met een log-in systeem wat ik aan het maken ben. Het systeem werkt als volgt:
Ook kun je dan niet meer opnieuw inloggen, totdat je de cookies verwijderd hebt.
Het volgende stukje code is verantwoordelijk voor het ophalen van de userdata als de pagina geladen wordt:
En dit stukje code logt de gebruiker in.
FetchQuery(); is trouwens een combinatie van mysql_query(); en mysql_fetch_array();
Het ligt niet aan een vreemde configuratie van de server, want andere login scripts werken wel. Ook is de server gewoon localhost.
Hoi,
Ik zit hier met een vreemd probleem met een log-in systeem wat ik aan het maken ben. Het systeem werkt als volgt:
- Gebruiker logt in
- session_id() wordt in database gestopt, met user-id van de gebruiker. (En nog wat andere details, zoals IP)
- session_id() wordt in cookie gestopt.
- Er wordt gecontroleerd of de sessie geldig is. (Of het IP, user agent overeenkomt etc)
- Uit de database worden de gegevens van de user gehaald, en deze worden opgeslagen in een registry classe.
Ook kun je dan niet meer opnieuw inloggen, totdat je de cookies verwijderd hebt.
Het volgende stukje code is verantwoordelijk voor het ophalen van de userdata als de pagina geladen wordt:
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
| private function __get_user() { if ( isset ( $_GET['do'] ) and $_GET['do'] == 'logout' ) { $this->kill_session(); } if ( isset ( $_COOKIE['logged_in'] ) ) { session_id ( $_COOKIE['logged_in'] ); } if ( isset ( $_SESSION['logged_in'] ) and $_SESSION['logged_in'] ) { $query = $this->db->query ( "SELECT uid, ua, ip, ttl FROM session_handler WHERE sid='" . session_id() . "' LIMIT 1"); if ( $this->db->count ( $query ) != 1 ) { $this->kill_session(); } else { $s = $this->db->fetch_array ( $query ); if ( $_SERVER['HTTP_USER_AGENT'] != $s['ua'] or time() > $s['ttl'] or $_SERVER['REMOTE_ADDR'] != $s['ip'] and $_SESSION['IP_CHECK'] ) { $this->kill_session(); } else { registry::init()->set('usrdata', $this->db->FetchQuery ( "SELECT id, name, g_id FROM users WHERE id='" . $s['uid'] . "' LIMIT 1" ) ); } } } else { registry::init()->set('usrdata', array ('id' => 0, 'g_id' => 0, 'name' => 'Gast', ) ); } } |
En dit stukje code logt de gebruiker in.
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
| public function auth_user ( $username, $password ) { $query = $this->db->query ( "SELECT * FROM users WHERE name='" . mysql_real_escape_string( $username ) . "' AND password='" . $this->salt ( $password ) . "'" ); if ( $this->db->count ( $query ) != 1 ) { return false; } else { $userdata = $this->db->fetch_array($query); registry::init()->set('usrdata', $userdata, true ); #registry value overschrijven $this->db->query ( "INSERT INTO session_handler (uid, sid, ua, ip, ttl) VALUES ('" . $userdata['id'] . "', '" . session_id(). "', '" . mysql_real_escape_string ( $_SERVER['HTTP_USER_AGENT'] ) . "', '" . mysql_real_escape_string ( $_SERVER['REMOTE_ADDR'] ) . "', '" . ( time() + $this->settings['session_lifetime'] ) . "')" ); $_SESSION['logged_in'] = true; setcookie ( 'logged_in', session_id() , time() + 3600 * 48 ); return true; } } |
FetchQuery(); is trouwens een combinatie van mysql_query(); en mysql_fetch_array();
Het ligt niet aan een vreemde configuratie van de server, want andere login scripts werken wel. Ook is de server gewoon localhost.