纯记录
#安装 Tokyo Cabinet wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.47.tar.gz tar zxvf tokyocabinet-1.4.47.tar.gz cd tokyocabinet-1.4.47 ./configure --enable-off64 #32位系统需要 --enable-off64,以让它支持大于2GB的文件 make make install cd ..
#安装 lua wget http://www.lua.org/ftp/lua-5.1.4.tar.gz tar zxvf lua-5.1.4.tar.gz cd lua-5.1.4 #要根据系统而定,直接make它会有提示 make linux make install ln -s /usr/local/bin/lua /usr/bin/lua cd ..
#安装Tokyo Cabinet 的 lua 扩展 wget http://1978th.net/tokyocabinet/luapkg/tokyocabinet-lua-1.10.tar.gz tar zxvf tokyocabinet-lua-1.10.tar.gz cd tkoyocabinet-lua-1.10 ./configure make make install cd ..
#安装 Tokyo Tyrant wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.41.tar.gz tar zxvf tokyotyrant-1.1.41.tar.gz cd tokyotyrant-1.1.41 ./configure --enable-lua --with-lua make make install cd ../
mkdir -p /session/
#还需要一个 expire.lua 文件,这个文件用于定时将过期的 session 清理。代码如下: cat > /session/expire.lua << "EOF" function expire() local args = {} local cdate = string.format("%d", _time()) table.insert(args, "addcond\0ts\0NUMLE\0" .. cdate) table.insert(args, "out") local res = _misc("search", args) if not res then _log("expiration was failed", 2) end end EOF
ulimit -SHn 51200 ttserver -host 127.0.0.1 -port 11222 -ext /session/expire.lua -extpc expire 5.0 -thnum 8 -dmn -pid /session/session.pid -log /session/session.log -le -ulog /session/ -ulim 128m -sid 1 -rts /session/session.rts '/session/session.tct#idx=key:lex#idx=ts:dec#dfunit=8'
#安装pecl tokyo_tyrant wget http://pecl.php.net/get/tokyo_tyrant tar zxvf tokyo_tyrant cd tokyo_tyrant-* /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install echo '[tokyo_tyrant] extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613//tokyo_tyrant.so"' >> /usr/local/php/lib/php.ini cd ../
<?php
/**
* Encoding : UTF-8
* Created on : 2011-05-15 05:18:09
*/
class Session {
private $sessionCN = 'sessionid';
private $sessionid;
private $tt;
public function __construct() {
define('SESS_EXPIRE', 3600);
$this->sessionCN;
$this->issessionid();
$this->tt = new TokyoTyrantTable('127.0.0.1', 11222);
}
public function get($name) {
$sessvl = $this->tt->get($this->sessionid);
$arr = unserialize($sessvl['vaule']);
return $arr[$name];
}
public function set($name, $vaule=NULL, $sessiontimeleft=SESS_EXPIRE) {
$sessvl = $this->tt->get($this->sessionid);
$arr = unserialize($sessvl['vaule']);
if ($vaule == NULL)
unset($arr[$name]);
else
$arr[$name] = $vaule;
$this->tt->put($this->sessionid, array('vaule' => serialize($arr), 'ts' => time() + $sessiontimeleft));
}
private function creatsessionid() {
$this->sessionid = md5(uniqid());
setcookie($this->sessionCN, $this->sessionid, 9999999999, NULL, NULL, NULL, TRUE);
}
private function issessionid() {
if (isset($_COOKIE[$this->sessionCN]))
$this->sessionid = $_COOKIE[$this->sessionCN];
else
$this->creatsessionid();
}
}
使用方法
<?php header("Content-type: text/html; charset=utf-8"); ?>
<?php
include 'class/Session.php';
$ss = new Session();
$ss->set('a', 's2a');
$ss->set('b', 's2b');
$ss->set('bc', 's2b');
$ss->set('bc', '');
var_dump($ss->get('bc'));