1 <?php
2
3
4
5 function userSessionBegin() {
6 echo '<br>Begin<br>';
7 //初始化数据库服务器连接,这个函数是最先执行,所以,以下的几个函数都用到数据库连接,所以,我就把它放在最先执行的函数里面,因为只要是数据库连接了,在整个文件中都有效。
8 $link = mysql_connect('127.0.0.1:3306', 'root', '1234abcd');
9 mysql_query('set names utf8');
10 mysql_query('use `php34`');
11 }
12 function userSessionEnd() {
13 echo '<br>End<br>';
14 return true;
15 }
16 /**
17 * 读操作
18 * 执行时机: session机制开启程中执行
19 * 工作: 从当前session数据区读取内容
20 * @param $sess_id string
21 * @return string
22 */
23 function userSessionRead($sess_id) {
24 echo '<br>Read<br>';
25 //查询
26 $sql = "SELECT session_content FROM `session` WHERE session_id='$sess_id'";
27 $result = mysql_query($sql);
28 if ($row = mysql_fetch_assoc($result)) {
29 return $row['session_content'];
30 } else {
31 //没有找到,返回空字符串
32 return '';
33 }
34 }
35 /**
36 * 写操作
37 * 执行时机: 脚本周期结束时,PHP在整理收尾时
38 * 工作: 将当前脚本处理好的session数据,持久化存储到数据库中!
39 * @param $sess_id string
40 * @param $sess_content string 序列化好的session内容字符串
41 * @return bool
42 */
43 function userSessionWrite($sess_id, $sess_content) {
44 echo '<br>Write<br>';
45 // 完成写,这里的REPLACE和INSERT一样,都是要是数据存在,就不写了,要是数据不在,就写进数据库
46 $sql = "REPLACE INTO `session` VALUES ('$sess_id', '$sess_content', unix_timestamp())";
47 // $sql = "INSERT INTO `session` VALUES ('$sess_id', '$sess_content') ON DUPLICATE KEY UPDATE session_content='$sess_content', last_time=unix_timestamp()"
48 return mysql_query($sql);
49 }
50 /**
51 * 删除操作
52 * 执行时机: 调用了session_destroy()销毁session过程中被调用
53 * 工作: 删除当前session的数据区(记录)
54 * @param $sess_id string
55 * @return bool
56 */
57 function userSessionDelete($sess_id) {
58 echo '<br>Delete<br>';
59 //删除
60 $sql = "DELETE FROM `session` WHERE session_id='$sess_id'";
61 return mysql_query($sql);
62 }
63 /**
64 * 垃圾回收操作
65 * 执行时机: 开启session机制时,有概率的执行
66 * 工作: 删除那些过期的session数据区
67 * @param $max_lifetime
68 * @return bool
69 */
70 function userSessionGC($max_lifetime) {
71 echo '<br>GC<br>';
72 //删除
73 $sql = "DELETE FROM `session` WHERE last_time<unix_timestamp()-$max_lifetime";
74 return mysql_query($sql);
75 }
76
77 // 设置
78 session_set_save_handler(
79 'userSessionBegin',
80 'userSessionEnd',
81 'userSessionRead',
82 'userSessionWrite',
83 'userSessionDelete',
84 'userSessionGC'
85 );
86 ini_set('session.save_handler', 'user');