设为首页 收藏本站
查看: 878|回复: 0

[经验分享] Php中session_set_save_handler的含义

[复制链接]

尚未签到

发表于 2015-8-30 12:08:53 | 显示全部楼层 |阅读模式
今天看手册,无意中看到了session_set_save_handler不解其意,于是上网搜寻得知,可以使用session_set_save_handler函数重载SESSION存储方式存储于MYSQL,样例如下:

DSC0000.gif DSC0001.gif Code
1 DSC0002.gif <?php   
2   $DB_SERVER = "server"; /* database server hostname */
3   $DB_NAME = "dbname"; /* database name */
4   $DB_USER = "root"; /* database user */
5   $DB_PASS = "*************"; /* database password */
6   
7   $DB_SELECT_DB = "";
8   $SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
9   
10  function sess_open($save_path, $session_name) {
11  global $DB_SERVER, $DB_NAME, $DB_USER, $DB_PASS, $DB_SELECT_DB;
12   
13  if (! $DB_SELECT_DB = mysql_pconnect($DB_SERVER, $DB_USER, $DB_PASS)) {
14  echo "SORRY! MYSQL ERROR : Can't connect to $DB_SERVER as $DB_USER";
15  echo "MySQL Error: ", mysql_error();
16  die;
17  }
18   
19  if (! mysql_select_db($DB_NAME, $DB_SELECT_DB)) {
20  echo "SORRY! MYSQL ERROR : Unable to select database $DB_NAME";
21  die;
22  }
23   
24  return true;
25  }
26   
27  function sess_close() {
28  return true;
29  }
30   
31  function sess_read($SessionKey){
32        global $DB_SELECT_DB, $SESS_LIFE;   
33        $Query = "SELECT SessionArray FROM cdb_global_sessions WHERE SessionKey = '".$SessionKey."' AND SessionExpTime > " . time();
34        $Result = mysql_query($Query, $DB_SELECT_DB);
35   
36  if (list($SessionArray) = mysql_fetch_row($Result)) {
37  return $SessionArray;
38  }
39   
40  return false;
41  }
42   
43  function sess_write($SessionKey, $VArray) {
44  global $DB_SELECT_DB, $SESS_LIFE;
45   
46  $SessionExpTime = time() + $SESS_LIFE;
47  $SessionArray = addslashes($VArray);
48   
49  $Query = "INSERT INTO cdb_global_sessions (SessionKey,SessionExpTime,SessionArray) VALUES ('".$SessionKey."','".$SessionExpTime."','".$SessionArray."')";
50  $Result = mysql_query($Query, $DB_SELECT_DB);
51   
52  if (!$Result){
53  $Query = "UPDATE cdb_global_sessions SET SessionExpTime = '".$SessionExpTime."', SessionArray = '".$SessionArray."' WHERE SessionKey = '".$SessionKey."' AND SessionExpTime > " . time();
54  $Result = mysql_query($Query, $DB_SELECT_DB);
55  }   
56  return $Result;
57  }
58   
59  function sess_destroy($SessionKey) {
60  global $DB_SELECT_DB;
61   
62  $Query = "DELETE FROM cdb_global_sessions WHERE SessionKey = '".$SessionKey."'";
63  $Result = mysql_query($Query, $DB_SELECT_DB);
64   
65  return $Result;
66  }
67   
68  function sess_gc($maxlifetime) {
69  global $DB_SELECT_DB;
70   
71  $Query = "DELETE FROM cdb_global_sessions WHERE SessionExpTime < " . time();
72  $Result = mysql_query($Query, $DB_SELECT_DB);
73   
74  return mysql_affected_rows($DB_SELECT_DB);
75  }
76   
77  session_set_save_handler(
78  "sess_open",
79  "sess_close",
80  "sess_read",
81  "sess_write",
82  "sess_destroy",
83  "sess_gc");
84session_start();
85  ?>
86

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-106307-1-1.html 上篇帖子: PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR 下篇帖子: 获取php数组的键名和值
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表