Commit bec1cb0b6e70e1fee9d9754d22066c48cb06dc83

Authored by michael
1 parent cda2eb97

almost finished session handling

refactored ip method


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@125 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing 1 changed file with 76 additions and 70 deletions
lib/Session.inc
@@ -24,30 +24,21 @@ class Session { @@ -24,30 +24,21 @@ class Session {
24 session_start(); 24 session_start();
25 25
26 // bind userID to session 26 // bind userID to session
27 - $_SESSION['userID'] = $userID; 27 + $_SESSION["userID"] = $userID;
28 28
29 // lookup group id and add to session 29 // lookup group id and add to session
30 - //$_SESSION['groupID'] = lookupGroupID($userID);  
31 - $_SESSION['groupID'] = owlusergroup($userID); 30 + $_SESSION["groupID"] = owlusergroup($userID);
32 31
33 // use the PHP generated session id 32 // use the PHP generated session id
34 $sessionID = session_id(); 33 $sessionID = session_id();
35 34
36 // retrieve client ip 35 // retrieve client ip
37 - if(getenv("HTTP_CLIENT_IP")) {  
38 - $ip = getenv("HTTP_CLIENT_IP");  
39 - } elseif(getenv("HTTP_X_FORWARDED_FOR")) {  
40 - $forwardedip = getenv("HTTP_X_FORWARDED_FOR");  
41 - list($ip,$ip2,$ip3,$ip4)= split (",", $forwardedip);  
42 - } else {  
43 - $ip = getenv("REMOTE_ADDR");  
44 - }  
45 -  
46 - $current = time(); 36 + $ip = $this->getClientIP();
47 37
48 // insert session information into db 38 // insert session information into db
49 $sql = new Owl_DB; 39 $sql = new Owl_DB;
50 - $query = "insert into $default->owl_sessions_table (id, user_id, lastused, ip) values ('$sessionID', '$userID', '" . date("Y-m-d H:i:s",$current) . "', '$ip')"; 40 + $query = "insert into $default->owl_sessions_table (session_id, user_id, lastused, ip) values ('$sessionID', '$userID', '" . date("Y-m-d H:i:s", time()) . "', '$ip')";
  41 + //echo "query=$query<br>";
51 $result = $sql->query($query); 42 $result = $sql->query($query);
52 if(!$result) { 43 if(!$result) {
53 die("$lang_err_sess_write"); 44 die("$lang_err_sess_write");
@@ -65,7 +56,7 @@ class Session { @@ -65,7 +56,7 @@ class Session {
65 session_start(); 56 session_start();
66 // remove the session information from the database 57 // remove the session information from the database
67 $sql = new Owl_DB; 58 $sql = new Owl_DB;
68 - $query = "delete from $default->owl_sessions_table where id = '" . session_id() . "'"; 59 + $query = "delete from $default->owl_sessions_table where session_id = '" . session_id() . "'";
69 $sql->query($query); 60 $sql->query($query);
70 61
71 // remove the php4 session 62 // remove the php4 session
@@ -84,77 +75,92 @@ class Session { @@ -84,77 +75,92 @@ class Session {
84 // deletes any sessions for this userID where the default timeout has elapsed. 75 // deletes any sessions for this userID where the default timeout has elapsed.
85 $time = time() - $default->owl_timeout; 76 $time = time() - $default->owl_timeout;
86 $sql = new Owl_DB; 77 $sql = new Owl_DB;
87 - $sql->query("delete from $default->owl_sessions_table where user_id = '" . $userID . "' and lastused <= $time "); 78 + $sql->query("delete from $default->owl_sessions_table where user_id = '" . $userID . "' and lastused <= '" . date("Y-m-d H:i:s",$time) . "'");
88 } 79 }
89 - 80 +
90 /** 81 /**
91 * Used to verify the current user's session. 82 * Used to verify the current user's session.
92 * 83 *
93 * @return 84 * @return
94 * array containing the userID, groupID and session verification status 85 * array containing the userID, groupID and session verification status
95 */ 86 */
96 - function verify() { 87 + function verify() {
  88 + global $default, $lang_sesstimeout, $lang_sessinuse, $lang_err_sess_notvalid;
  89 +
97 getprefs(); 90 getprefs();
98 - global $default, $lang_sesstimeout, $lang_sessinuse, $lang_clicklogin;  
99 - session_start();  
100 91
101 $sessionID = session_id(); 92 $sessionID = session_id();
  93 + if (strlen($sessionID) > 0) {
102 94
103 - // initialise return status  
104 - $verified["status"] = 0;  
105 -  
106 - // this should be an existing session, so check the db  
107 - $sql = new Owl_DB;  
108 - $sql->query("select * from $default->owl_sessions_table where id = '$sessionID'");  
109 - $numrows = $sql->num_rows($sql);  
110 - $time = time();  
111 -  
112 - if ($numrows == "1") {  
113 - while($sql->next_record()) {  
114 - // get client ip  
115 - if(getenv("HTTP_CLIENT_IP")) {  
116 - $ip = getenv("HTTP_CLIENT_IP");  
117 - } elseif(getenv("HTTP_X_FORWARDED_FOR")) {  
118 - $forwardedip = getenv("HTTP_X_FORWARDED_FOR");  
119 - list($ip,$ip2,$ip3,$ip4)= split (",", $forwardedip);  
120 - } else {  
121 - $ip = getenv("REMOTE_ADDR");  
122 - }  
123 -  
124 - // check that ip matches  
125 - if ($ip == $sql->f("ip")) {  
126 - // if timeout not exceeded  
127 - if(($time - strtotime($sql->f("lastused"))) <= $default->owl_timeout) {  
128 - // set verified status  
129 - $verified["status"] = 1;  
130 - // update userID? this should be the same value on the session  
131 - $verified["userID"] = $sql->f("user_id");  
132 - $sql->query("select * from $default->owl_users_table where id = '".$verified["userid"]."'");  
133 - while($sql->next_record()) {  
134 - $verified["groupID"] = $sql->f("groupid"); 95 + // initialise return status
  96 + $sessionStatus["status"] = 0;
  97 +
  98 + // this should be an existing session, so check the db
  99 + $sql = new Owl_DB;
  100 + $sql->query("select * from $default->owl_sessions_table where session_id = '$sessionID'");
  101 + $numrows = $sql->num_rows($sql);
  102 + $time = time();
  103 +
  104 + // found one match
  105 + if ($numrows == "1") {
  106 + while($sql->next_record()) {
  107 + $ip = $this->getClientIP();
  108 + // check that ip matches
  109 + if ($ip == $sql->f("ip")) {
  110 + // now check if the timeout has been exceeded
  111 + if(($time - strtotime($sql->f("lastused"))) <= $default->owl_timeout) {
  112 + // session has been verified, update status
  113 + $sessionStatus["status"] = 1;
  114 + // only set the userID if its not in the array already
  115 + if (!$sessionStatus["userID"]) {
  116 + $sessionStatus["userID"] = $sql->f("user_id");
  117 + }
  118 + // lookup the user
  119 + $sql->query("select * from $default->owl_users_table where id = '".$sessionStatus["userid"]."'");
  120 + while($sql->next_record()) {
  121 + // only set the groupID if its not in the array already
  122 + if (!$sessionStatus["groupID"]) {
  123 + $sessionStatus["groupID"] = $sql->f("group_id");
  124 + }
  125 + }
  126 + // update last used timestamps
  127 + $sql->query("update $default->owl_sessions_table set lastused = '" . date("Y-m-d H:i:s",time()) ."' where user_id = '" . $sessionStatus["userID"] . "'");
  128 + // add the array to the session
  129 + $_SESSION["sessionStatus"] = $sessionStatus;
  130 + } else {
  131 + // session timed out status
  132 + $sessionStatus["status"] = 2;
  133 + $default->errorMessage = $lang_sesstimeout;
135 } 134 }
136 - // session verified, so update last user time  
137 - $lastused = time();  
138 - $userID = $sessionStatus["userID"];  
139 - $sql->query("update $default->owl_sessions_table set lastused = '$lastused' where user_id = '$userID'");  
140 -  
141 } else { 135 } else {
142 - // session timed out status  
143 - $verified["status"] = 2;  
144 - $default->errorMessage = $lang_sesstimeout; 136 + // session in use status
  137 + $sessionStatus["status"] = 3;
  138 + $default->errorMessage = $lang_sessinuse;
145 } 139 }
146 - } else {  
147 - // session in use status  
148 - $verified["status"] = 3;  
149 - $default->errorMessage = $lang_sessinuse;  
150 } 140 }
151 - } 141 + }
  142 + } else {
  143 + // there is no session
  144 + return false;
152 } 145 }
153 - // add this array to the session  
154 - session_register($sessionStatus);  
155 -  
156 - // also return the array for good measure  
157 - return $verified; 146 + // return the array
  147 + return $sessionStatus;
  148 + }
  149 +
  150 + /**
  151 + * Retrieves and returns the IP address of the current user
  152 + */
  153 + function getClientIP() {
  154 + // get client ip
  155 + if(getenv("HTTP_CLIENT_IP")) {
  156 + $ip = getenv("HTTP_CLIENT_IP");
  157 + } elseif(getenv("HTTP_X_FORWARDED_FOR")) {
  158 + $forwardedip = getenv("HTTP_X_FORWARDED_FOR");
  159 + list($ip,$ip2,$ip3,$ip4)= split (",", $forwardedip);
  160 + } else {
  161 + $ip = getenv("REMOTE_ADDR");
  162 + }
  163 + return $ip;
158 } 164 }
159 } 165 }
160 ?> 166 ?>