<?php
							 | 
						|
								
							 | 
						|
								require_once('./inc/model.class.php');
							 | 
						|
								
							 | 
						|
								class SessionModel extends Model
							 | 
						|
								{
							 | 
						|
									private $userdata = array();
							 | 
						|
									
							 | 
						|
									public function __construct(&$db)
							 | 
						|
									{
							 | 
						|
										$this->db = $db;
							 | 
						|
										
							 | 
						|
										if (isset($_COOKIE[COOKIE_NAME]))
							 | 
						|
										{
							 | 
						|
											$result = $this->select(SESSIONS_TABLE, '*', 'session_id=\''.$_COOKIE[COOKIE_NAME].'\' AND expiry_time>=NOW()');
							 | 
						|
											if (count($result) > 0)
							 | 
						|
											{
							 | 
						|
												//update session expiry time in database and in cookie
							 | 
						|
												if ($result[0]['IP'] != $_SERVER['REMOTE_ADDR'])
							 | 
						|
												{
							 | 
						|
													$this->deleteSession();
							 | 
						|
												}
							 | 
						|
												else
							 | 
						|
												{
							 | 
						|
													$this->updateSession();
							 | 
						|
													$uid = $result[0]['user_id'];
							 | 
						|
													
							 | 
						|
													$result = $this->select(USERS_TABLE, 'user_id, nick, rank', 'user_id=\''.$uid.'\'');
							 | 
						|
													$this->userdata = $result[0];
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											else
							 | 
						|
											{
							 | 
						|
												$this->deleteSession();
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function updateSession()
							 | 
						|
									{
							 | 
						|
										/*$this->db->query('UPDATE '.SESSIONS_TABLE.' SET expiry_time=(NOW() + INTERVAL 120 MINUTE) WHERE session_id=\''.$_COOKIE[COOKIE_NAME].'\'');
							 | 
						|
										setcookie(COOKIE_NAME, $_COOKIE[COOKIE_NAME], $_SERVER['REQUEST_TIME']+7200, COOKIE_PATH, COOKIE_DOMAIN, false, true);	*/
							 | 
						|
										$newid = $this->generateSessionID();
							 | 
						|
										$this->db->query('UPDATE '.SESSIONS_TABLE.' SET expiry_time=(NOW() + INTERVAL 120 MINUTE), session_id=\''.$newid.'\' WHERE session_id=\''.$_COOKIE[COOKIE_NAME].'\'');
							 | 
						|
										setcookie(COOKIE_NAME, $newid, $_SERVER['REQUEST_TIME']+7200, COOKIE_PATH, COOKIE_DOMAIN, false, true);
							 | 
						|
										$_COOKIE[COOKIE_NAME] = $newid;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function deleteSession()
							 | 
						|
									{
							 | 
						|
										setcookie(COOKIE_NAME, '', $_SERVER['REQUEST_TIME']-3600, COOKIE_PATH, COOKIE_DOMAIN, false, true);
							 | 
						|
										$this->db->query('DELETE FROM '.SESSIONS_TABLE.' WHERE session_id=\''.$_COOKIE[COOKIE_NAME].'\'');
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									private function generateSessionID()
							 | 
						|
									{
							 | 
						|
										$out = $_SERVER['HTTP_USER_AGENT'].$_SERVER['REQUEST_TIME_FLOAT'].$_SERVER['REMOTE_ADDR'].rand(1, 50000);
							 | 
						|
										return md5($out);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function registerNewSession($user_id)
							 | 
						|
									{
							 | 
						|
										$newID = $this->generateSessionID();
							 | 
						|
										$query = 'UPDATE '.USERS_INFO_TABLE.'
							 | 
						|
										SET lastvisit=NOW()
							 | 
						|
										WHERE user_id=\''.$user_id.'\'';
							 | 
						|
										
							 | 
						|
										$this->db->query($query);
							 | 
						|
										
							 | 
						|
										$query = 
							 | 
						|
										'INSERT INTO 
							 | 
						|
										'.SESSIONS_TABLE.'
							 | 
						|
										(session_id, user_id, IP, expiry_time)
							 | 
						|
										 VALUES
							 | 
						|
										 (\''.$newID.'\', \''.$user_id.'\', \''.$_SERVER['REMOTE_ADDR'].'\', (NOW() + INTERVAL 120 MINUTE) );';
							 | 
						|
										
							 | 
						|
										$this->db->query($query);
							 | 
						|
										
							 | 
						|
										setcookie(COOKIE_NAME, $newID, $_SERVER['REQUEST_TIME']+7200, COOKIE_PATH, COOKIE_DOMAIN, false, true);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function tryGetUser($nick, $passwd)
							 | 
						|
									{
							 | 
						|
										$result = $this->select(USERS_TABLE, 'user_id, nick', 'nick=\''.$nick.'\' AND password=\''.$passwd.'\'', '', 1);
							 | 
						|
										
							 | 
						|
										if (count($result) > 0 )
							 | 
						|
											return $result[0];
							 | 
						|
										else
							 | 
						|
											return array();
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function isLogged()
							 | 
						|
									{
							 | 
						|
										if (count($this->userdata) > 0)
							 | 
						|
											return true;	
							 | 
						|
										else
							 | 
						|
											return false;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function getNick()
							 | 
						|
									{
							 | 
						|
										if ($this->isLogged())
							 | 
						|
											return $this->userdata['nick'];
							 | 
						|
										else
							 | 
						|
											return null;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function getRank()
							 | 
						|
									{
							 | 
						|
										if ($this->isLogged())
							 | 
						|
											return $this->userdata['rank'];
							 | 
						|
										else
							 | 
						|
											return null;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function getID()
							 | 
						|
									{
							 | 
						|
										if ($this->isLogged())
							 | 
						|
											return $this->userdata['user_id'];
							 | 
						|
										else
							 | 
						|
											return null;
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								?>
							 |