Warning: curl_exec() has been disabled for security reasons in /pub/host/sunboyu/sunboyu/www/wp-includes/http.php on line 1022
2008 七月 31 一个程序猿 孙小一,孙小二,PHP,MYSQL,LINUX,APACHE,原创技术,扯淡

使用Mysql来存储Session

作者 : admin 于 2008年07月31日, 22:39:29
2008
07-31

接上篇,我们已经知道session的具体存储机制,我们来尝试修改一下这个机制,让数据存储在mysql数据库中。

mysql有三部分的内容,session session_data session_expires分别为session的id session的内容,session的过期时间。

创建这样一个数据库

CREATE TABLE IF NOT EXISTS `sessions` (
`session` varchar(255) character set utf8 collate utf8_bin NOT NULL,
`session_expires` int(10) unsigned NOT NULL default ‘0′,
`session_data` mediumtext collate utf8_unicode_ci,
KEY `session` (`session`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

相对于文件方式的session存储,这两个函数是不用动的
function open($save_path, $session_name)
{
global $sess_save_path;

$sess_save_path = $save_path;
return(true);
}

function close()
{
return(true);
}
而需要修改的是读,写,删,过期操作的函数

读的操作,很简单,只是从数据库中,根据sessionid,读出date字段中的内容
function read($sessID) {
global $php_errormsg;
// fetch session-data
$query = ”
SELECT session_data FROM sessions
WHERE session = ‘$sessID’
AND session_expires >
“.time();
$result = $this->mdb2->query($query);
// return data or an empty string at failure
if (MDB2::isError($result)) {
$php_errormsg .= $result->getMessage();
$php_errormsg .= $result->getDebugInfo ();
return false;
}
list($value)=@$result->fetchrow();
return $value;
}
同理,写的操作就是update数据,destory的操作为删除session的记录,另外有个gc的操作是删除过期的session。
具体的代码没有去实现,但在PHP手册上都有。同时手册还介绍了memcache储存的方式,效率应该会不错的。

这是本月最后一篇日志,也算为下月找个题。

PHP session机制详解

作者 : admin 于 2008年07月31日, 20:27:05
2008
07-31

http://cn.php.net/manual/en/function.session-set-save-handler.php

php的session函数非常好用,使用非常简单,$_SESSION[$name] = **  直接写session,而$_SESSION[$name]就可以直接读session。现在剖析一下简单背后,php是如何工作的。看上边的链接,

bool session_set_save_handler ( callback $open , callback $close , callback $read , callback $write , callback $destroy , callback $gc )

此函数有六个动作,关于session的初始化,结束,读,写,删,和超时处理。

open:初始化session存储路径信息。

close:关闭session。

read:读session的内容

write:写session的内容

destroy:删除session内容

gc:删除过期session

可以看这些函数实现,使用了file操作,在服务端写数据保存session。而这些数据以session专有的格式进行存储,类似cookie的,大家可以试着分解一下。

我找了个session,在editplus下打开 是这样的:

UserID|s:1:”1″;UserName|s:5:”admin”;

博客重大改革-增设技术分类!

作者 : admin 于 2008年07月31日, 20:10:25
2008
07-31

时间长了,发现很多技术文章没法区分了,经过详细考虑,决定进行技术分类。

初步考虑,在原创技术下进行分类,根据自己经常搞的技术点,分为 LINUX APACHE MYSQL PHP JAVASCRIPT OTHER 这既是我喜欢的lamp架构,和web程序员必须掌握的js脚本技术。

腾讯发布linux版本qq,第一时间抢鲜试用

作者 : admin 于 2008年07月31日, 13:35:51
2008
07-31

http://im.qq.com/qq/linux/

腾讯果然搞笑,痛快的在7月份发布了mac版本的qq和linux版本的qq。

本人在ubuntu下试用了一下,没有源代码,传统的做法,qq的一些功能被阉割。

不过用了几分钟,很稳定,多窗口,输入法,都没有出现什么问题。没有截图等花哨的功能,估计是以后要发布。

顶一个!