Skip to content

Commit 0a3e18d

Browse files
committed
added script to delete old session files
1 parent 1bddfee commit 0a3e18d

File tree

5 files changed

+73
-8
lines changed

5 files changed

+73
-8
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,12 @@ Session timeout in seconds , this value is used to calculate Set-Cookie's expire
3838
name of the session , this is the cookie name sent to the client
3939

4040
#### sessionFilePrefix
41-
this is the prefix for session file names for this application , since all the session files are stored in same directory , this helps to categories the session files for each application
41+
this is the prefix for session file names for this application , since all the session files are stored in same directory , this helps to categories the session files for each application
42+
43+
## Scripts
44+
#### delete-expired-sessions
45+
46+
to delete the expired session files , run this script (manually or in a cron job) in regular intervals
47+
```
48+
$ ./vendor/bin/delete-expired-sessions
49+
```

bin/delete-expired-sessions

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env php
2+
<?php
3+
4+
function includeIfExists($file)
5+
{
6+
if (file_exists($file)) {
7+
return include $file;
8+
}
9+
}
10+
11+
if ((!$loader = includeIfExists(__DIR__.'/../vendor/autoload.php')) && (!$loader = includeIfExists(__DIR__.'/../../../autoload.php'))) {
12+
print('You must set up the project dependencies, run the following commands:'.PHP_EOL.
13+
'curl -s http://getcomposer.org/installer | php'.PHP_EOL.
14+
'php composer.phar install'.PHP_EOL);
15+
die(1);
16+
}
17+
18+
error_reporting(0);
19+
20+
$deleteExpiredSessions = new \PhpPlatform\WebSession\DeleteExpiredSessions();
21+
$deleteExpiredSessions->run();

composer.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
"role" : "Software Developer"
1616
}
1717
],
18+
"bin" : [
19+
"bin/delete-expired-sessions"
20+
],
1821
"require" : {
1922
"php" : ">=5.4",
2023
"php-platform/session" : "~0.1"
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace PhpPlatform\WebSession;
4+
5+
use PhpPlatform\JSONCache\Cache;
6+
use PhpPlatform\Config\Settings;
7+
8+
class DeleteExpiredSessions {
9+
10+
static function run(){
11+
$lastAccessKeyRP = new \ReflectionProperty('PhpPlatform\WebSession\Session', '_lasAccessKey');
12+
$lastAccessKeyRP->setAccessible(true);
13+
$lastAccessKey = $lastAccessKeyRP->getValue();
14+
$sessions = Cache::getInstance()->getData($lastAccessKey);
15+
16+
if(is_array($sessions)){
17+
$sessionFilePrefix = Settings::getSettings(Package::Name,'sessionFilePrefix');
18+
$sessionTimeOut = Settings::getSettings(Package::Name,'timeout');
19+
$sessionSalt = Settings::getSettings(Package::Name,'salt');
20+
21+
foreach ($sessions as $sessionId=>$lastAccessTime){
22+
if(time() - $lastAccessTime > 2 * $sessionTimeOut){
23+
$sessionFileName = md5($sessionSalt.$sessionId);
24+
$sessionFileName = $sessionFilePrefix.$sessionFileName;
25+
if(is_file($sessionFileName)){
26+
unlink($sessionFileName);
27+
}
28+
}
29+
}
30+
}
31+
}
32+
33+
}

src/WebSession/Session.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use PhpPlatform\Config\Settings;
88

99
class Session extends Cache implements ISession{
10-
private $_lasAccessKey = "php-platform.web-session.last-access";
10+
static private $_lasAccessKey = "php-platform.web-session.last-access";
1111
private $id = null;
1212
private static $session = null;
1313

@@ -23,11 +23,11 @@ protected function __construct(){
2323
if(array_key_exists($sessionCookieName, $_COOKIE)){
2424
// cookie is set
2525
$sessionCookie = $_COOKIE[$sessionCookieName];
26-
$sessionLastAccessTime = Cache::getInstance()->getData($this->_lasAccessKey.'.'.$sessionCookie);
26+
$sessionLastAccessTime = Cache::getInstance()->getData(self::_lasAccessKey.'.'.$sessionCookie);
2727

2828
if(isset($sessionLastAccessTime) && time() - $sessionLastAccessTime < $sessionTimeOut){
2929
// session not expired
30-
$sessionFileName = md5($sessionSalt.$_COOKIE[$sessionCookieName]);
30+
$sessionFileName = md5($sessionSalt.$sessionCookie);
3131
$this->cacheFileName = $sessionFilePrefix.$sessionFileName;
3232
$validSession = true;
3333
}
@@ -39,7 +39,7 @@ protected function __construct(){
3939
while(isset($sessionLastAccessTime)){
4040
// generate a non-colliding session cokiee
4141
$sessionCookie = md5(microtime().$_SERVER['REMOTE_ADDR'].rand(1,1000));
42-
$sessionLastAccessTime = Cache::getInstance()->getData($this->_lasAccessKey.'.'.$sessionCookie);
42+
$sessionLastAccessTime = Cache::getInstance()->getData(self::_lasAccessKey.'.'.$sessionCookie);
4343
}
4444
$sessionFileName = md5($sessionSalt.$sessionCookie);
4545
$this->cacheFileName = $sessionFilePrefix.$sessionFileName;
@@ -106,7 +106,7 @@ public function reset($flag = 0) {
106106

107107
private function setLastAccessTime($time){
108108
$lastAccessTime = array($this->id=>$time);
109-
$cachePaths = array_reverse(explode(".", $this->_lasAccessKey));
109+
$cachePaths = array_reverse(explode(".", self::_lasAccessKey));
110110
foreach ($cachePaths as $cachePath){
111111
$lastAccessTime = array($cachePath=>$lastAccessTime);
112112
}
@@ -118,7 +118,7 @@ private function removeSessionSetCookieHeader($sessionName){
118118
$cookiesToBeRestored = array();
119119
foreach ($headers as $header){
120120
if(strpos($header, "Set-Cookie:") === 0){
121-
// SetCookiee Header
121+
// SetCookie Header
122122
if(strpos($header, "Set-Cookie: $sessionName=") !== 0){
123123
// not a session SetCookie header
124124
$cookiesToBeRestored[] = $header;
@@ -127,7 +127,7 @@ private function removeSessionSetCookieHeader($sessionName){
127127
}
128128
header_remove("Set-Cookie");
129129
foreach ($cookiesToBeRestored as $header){
130-
header($header);
130+
header($header,false);
131131
}
132132
}
133133

0 commit comments

Comments
 (0)