78)PHP,编写session存储机制(将数据写进数据库)的代码整理(未实验)
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');