summaryrefslogtreecommitdiffstats
path: root/lib/class/session.class.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/class/session.class.php')
-rw-r--r--lib/class/session.class.php41
1 files changed, 20 insertions, 21 deletions
diff --git a/lib/class/session.class.php b/lib/class/session.class.php
index 1afa47bf..af63dbda 100644
--- a/lib/class/session.class.php
+++ b/lib/class/session.class.php
@@ -113,13 +113,13 @@ class Session {
* This function is randomly called and it cleans up the spoo
*/
public static function gc($maxlifetime) {
-
$sql = "DELETE FROM `session` WHERE `expire` < '" . time() . "'";
$db_results = Dba::write($sql);
// Also clean up things that use sessions as keys
Query::gc();
Tmp_Playlist::gc();
+ Stream_Playlist::gc();
return true;
}
@@ -173,7 +173,10 @@ class Session {
// Regenerate the session ID to prevent fixation
switch ($data['type']) {
case 'api':
- $key = md5(uniqid(rand(), true));
+ case 'stream':
+ $key = isset($data['sid'])
+ ? $data['sid']
+ : md5(uniqid(rand(), true));
break;
case 'mysql':
default:
@@ -192,7 +195,13 @@ class Session {
$type = Dba::escape($data['type']);
$value = Dba::escape($data['value']);
$agent = Dba::escape(substr($_SERVER['HTTP_USER_AGENT'], 0, 254));
- $expire = Dba::escape(time() + Config::get('session_length'));
+
+ if ($type == 'stream') {
+ $expire = time() + Config::get('stream_length');
+ }
+ else {
+ $expire = time() + Config::get('session_length');
+ }
if (!strlen($value)) { $value = ' '; }
@@ -258,11 +267,11 @@ class Session {
// Switch on the type they pass
switch ($type) {
case 'api':
+ case 'stream':
$key = Dba::escape($key);
$time = time();
- $sql = "SELECT * FROM `session` WHERE " .
- "`id`='$key' AND `expire` > '$time' " .
- "AND `type`='$type'";
+ $sql = "SELECT * FROM `session` WHERE `id`='$key' AND " .
+ "`expire` > '$time' AND `type` IN ('api', 'stream')";
$db_results = Dba::read($sql);
if (Dba::num_rows($db_results)) {
@@ -287,20 +296,6 @@ class Session {
return true;
}
break;
- case 'stream':
- $key = Dba::escape($key);
- $ip = Dba::escape(inet_pton($data['ip']));
- $agent = Dba::escape($data['agent']);
- $sql = "SELECT * FROM `session_stream` WHERE " .
- "`id`='$key' AND `expire` > '$time' " .
- "AND `ip`='$ip' AND `agent`='$agent'";
- $db_results = Dba::read($sql);
-
- if (Dba::num_rows($db_results)) {
- return true;
- }
-
- break;
default:
return false;
break;
@@ -316,13 +311,17 @@ class Session {
*
* This takes a SID and extends its expiration.
*/
- public static function extend($sid) {
+ public static function extend($sid, $type = null) {
$time = time();
$sid = Dba::escape($sid);
$expire = isset($_COOKIE[Config::get('session_name') . '_remember'])
? $time + Config::get('remember_length')
: $time + Config::get('session_length');
+ if ($type == 'stream') {
+ $expire = $time + Config::get('stream_length');
+ }
+
$sql = "UPDATE `session` SET `expire`='$expire' WHERE `id`='$sid'";
if ($db_results = Dba::write($sql)) {
debug_event('session', $sid . ' has been extended to ' . date('r', $expire) . ' extension length ' . ($expire - $time), 5);