使用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的一些功能被阉割。

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

顶一个!

一个操作Cookie的小程序

作者 : admin 于 2008年07月30日, 22:57:24
2008
07-30

simplecookie

  1. <br />
  2. /*<br />
  3.     一个简单的cookie操作函数,自家用<br />
  4. */<br />
  5. function SetCookie()<br />
  6. {<br />
  7.     var name = arguments[0];<br />
  8. var value = arguments[1];<br />
  9. //初始化默认存储时间<br />
  10. var time = 3600;<br />
  11. if(arguments[2]!=undefined)<br />
  12. {<br />
  13.     time = arguments[2]<br />
  14. }<br />
  15. if(arguments[0]==undefined||arguments[0]==undefined)<br />
  16. {<br />
  17.     alert("SetCookie Has ERROR Agruments");<br />
  18. }<br />
  19. document.cookie = name+"="+escape(value)+" ; expires="+GetTime(time);<br />
  20. }<br />
  21. function GetCookie( name )<br />
  22. {<br />
  23.     var arr = document.cookie.match(new RegExp("(^|)"+name+"=([^;]*)(;|$)"));<br />
  24. if(arr!=null)<br />
  25. {<br />
  26.     return unescape(arr[2]);<br />
  27. }<br />
  28. else<br />
  29. {<br />
  30.     return null;<br />
  31. }<br />
  32. }<br />
  33. function DelCookie( name )<br />
  34. {<br />
  35.     var value = GetCookie( name );<br />
  36. if(value!=null)<br />
  37. {<br />
  38.     document.cookie = name+"="+escape(value)+" ; expires="+GetTime( 0 );<br />
  39. }<br />
  40. }<br />
  41. function GetTime( time )<br />
  42. {<br />
  43.     var exp = new Date();<br />
  44. exp.setTime( exp.getTime()+time*1000 );<br />
  45. return exp.toGMTString();<br />
  46. }<br />

用户行为状态的持久化

作者 : admin 于 2008年07月30日, 12:41:12
2008
07-30

用持久化这个词,有点拽文的意思,但必须找出一个形象的词汇来描述,暂且这么用。

用户行为持久,主要指保留用户行为状态,比如保存用户的登录信息,可以让用户不必每次输入密码。保留用户当前打开的页面,当前对客户端的操作等。

用户登录状态,主要应用cookie的方式把一些认证信息保存在本地,而其他信息的保留,同样可以使用cookie保存,比如框架的一些状态。

http://openoa.sunboyu.cn   这个网站中,可以看一下对用户行为持久的一些操作。首先是框架左侧菜单显示的控制。这个控制可以在刷新的时候保持用户的折叠状态,而不用每次刷新,都去折叠菜单。这个控制用cookie保存数据。

还有个操作,就是曾经另我很头疼的,大框架每刷新一次,主框架都会恢复默认的链接,也就是中间打开的页面会丢失。最近用js解决了这个问题,每次点击左侧菜单链接的时候,使用锚点标记的方式把链接写在url中,再次刷新的时候,根据url中的锚点确认主框架的链接。

这两个功能都完成了,用着还不错。

山外有山,传说中的大网站

作者 : admin 于 2008年07月30日, 08:57:14
2008
07-30

网站技术总是无止境的,不同的网站有不同的技术架构。昨天接触了某门户技术总监,简单聊了些网站技术,才知道自己原来还在山脚。好多技术不是免费开源能换得来的,在实现一些事情的时候,商用软件能更快解决一些问题,节约的时间就是我们的利润。

但一般的中小网站依然提倡免费开源的解决方案,造成我思想上一些束缚, 没有去发散性的组织一些解决方案。这块原来是我发展的失误。曾经一个些java的大哥提醒我,不要过分迷信开源。事实的确是这样。以后逐渐接触好的商用软件,望有条件的朋友给予支持。

美国军人一样流行“俯卧撑”

作者 : admin 于 2008年07月29日, 09:03:14
2008
07-29

http://news.qq.com/a/20080728/000702.htm

QQ的记者真他娘的扯淡,新名词用的真是地方:

神枪手瞄准奥运金牌

佐治亚州本宁堡,子弹声音同附近士兵训练所用的布拉德利战车的轰隆声交织在一起。19岁的文森特·汉考克正全神贯注地进行基本的军事训练,训练强度与战时新兵并无两样。在此之前,汉考克在俄克拉荷马州希尔堡学会了如何搜索有敌军藏匿的建筑物,同时练就了不引爆路边炸弹也能爬上卡车的高超本领。他每天凌晨3点起床,与即将被派往伊拉克或阿富汗前线执行任务的士兵一道做俯卧撑。

感冒了,一天基本啥都没干

作者 : admin 于 2008年07月28日, 14:21:10
2008
07-28

耽误一天,苦苦等待市场部门的需求。从来都是别人逼技术,我还从来没有等过别人,怪哉,怪哉。

杀死占用80端口的进程

作者 : admin 于 2008年07月27日, 10:33:53
2008
07-27

just kill off the hanging processes:
# fuser 80/tcp
80/tcp: 3010 3702 4088 16754
# kill -n 9 3010
# kill -n 9 3702
# kill -n 9 4088
# kill -n 9 16754
# apachectl start

 Page 1 of 6  1  2  3  4  5 » ...  Last »