|
@@ -1,6 +1,68 @@
|
|
|
<?php
|
|
|
-class Session extends DBObjectAutoCreate {
|
|
|
- public function __construct($table, $key, $id) {
|
|
|
- parent::__construct($table, $key, $id);
|
|
|
+ApplicationSettings::RegisterDefaultSetting("session", "expiry_window", "604800"); //a week
|
|
|
+
|
|
|
+class Session extends DBObjectAutoCreate {
|
|
|
+ private $_expiry;
|
|
|
+ private static $_instance,$_user;
|
|
|
+
|
|
|
+ public function __construct($id=0) {
|
|
|
+ parent::__construct("sessions", "session_id", $id);
|
|
|
+ $this->_expiry=strtotime($this->SessionExpiry);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function Save() {
|
|
|
+ if ($this->SessionId==null)
|
|
|
+ $this->SessionId=Utils::GenerateRandomString(32);
|
|
|
+
|
|
|
+ $expiryWindow=(int)ApplicationSettings::GetSetting("session", "expiry_window");
|
|
|
+ $this->SessionExpiry=time()+$expiryWindow;
|
|
|
+ setcookie("session_id",$this->SessionId,$expiryWindow);
|
|
|
+
|
|
|
+ parent::Save();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function HasExpired(){
|
|
|
+ return $this->_expiry<time();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static function Instantiate(){
|
|
|
+ if (self::$_instance!=null)
|
|
|
+ return;
|
|
|
+
|
|
|
+ $instance=null;
|
|
|
+ if (isset($_COOKIE['session_id'])){
|
|
|
+ $instance=new Session($_COOKIE['session_id']);
|
|
|
+ if ($instance->HasExpired())
|
|
|
+ $instance=new Session();
|
|
|
+ } else
|
|
|
+ $instance=new Session();
|
|
|
+
|
|
|
+ self::$_instance=$instance;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function Destroy(){
|
|
|
+ self::Instantiate();
|
|
|
+
|
|
|
+ $PDO=self::GetPDO();
|
|
|
+ $prep=$PDO->prepare("DELETE FROM sessions WHERE session_id=?");
|
|
|
+ $prep->execute(array(self::$_instance->SessionId));
|
|
|
+
|
|
|
+ self::$_instance=null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function GetLoggedInUser() {
|
|
|
+ self::Instantiate();
|
|
|
+
|
|
|
+ if (isset(self::$_user))
|
|
|
+ return self::$_user;
|
|
|
+
|
|
|
+ self::$_user=new User(self::$_instance->UserId);
|
|
|
+
|
|
|
+ return self::$_user;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function SetLoggedInUser($user) {
|
|
|
+ self::$_instance->UserId=$user->UserId;
|
|
|
+ self::$_instance->Save();
|
|
|
}
|
|
|
}
|