PHP使用MySQL保存会话的方式
本文演示了PHP使用MySQL来保存会话会话的方式:在许多大系统中,我们通常有这个函数。但是要分离和分析,互联网上没有太多的信息。下面我安排了一篇文章与大家分享。
用mysql保存会话会话比文件有很多优势:
1)支持分布式系统,只能在一台机器上保存文件。
2)对于大型访问系统,当使用文件时,每个会话都保存在一个文件中,并且该目录将是超级大的,并且很难找到会话文件。
使用mysql创建会话表的第一个保存会话:
< PHP
hostname_login美元=localhost; / /服务器地址
username_login美元=根; / /用户名
password_login美元=密码; / /
data_name美元=会话; / /数据库名称
登录= mysql_pconnect美元(hostname_login美元美元美元,username_login,password_login)或trigger_error(mysql_error(),e_user_error);
SQL数据库显示美元像。data_name美元。; / /如果它是存在的
如果($ rs_table = mysql_query($ SQL登录美元)){
如果($ rs_value = mysql_fetch_array($ rs_table)){
数据库已经存在!!;
出口();
}
}
为SQL =数据库data_name美元创造;
mysql_query($ SQL); / /箱数据库
创建数据库成功!;
mysql_select_db(data_name美元,$登录);
创建表
`会话密钥` varchar(32)不为空的默认,
` sessionarray ` blob不空,
` sessionexptime ` int(20)符号的非空默认'0',
主键(`会话密钥`),
关键`会话密钥(会话密钥` ` `)
= MyISAM引擎默认的字符集utf8); / /创建一个新的数据库的SQL语句
mysql_query($ SQL);
成功的新数据库表!;
>
/ / / / / / / / / mysqlsession类如下:
< PHP
类mysqlsession {
在使用会话页时,页面必须是顶部网格,在页面的开头不能为空。
私人db_server美元=localhost; / /数据库服务器的主机名
私人=$ db_name ; / /数据库名称
私人db_user美元=根; / / MySQL数据库用户名
私人=$ db_pass ; / /访问MySQL数据库的密码
私人db_select_db美元= ;
/ /私人sess_life美元= 1440; / /会话时间的最大长度,以秒。
私人sess_life = 0美元;
功能mysqlsession($ sessiondb){
/ / session_write_close();
美元-> db_name = $ sessiondb;
美元-> sess_life = get_cfg_var(的会议。gc_maxlifetime );
session_module_name(用户的);
session_set_save_handler(
阵列($,'sess_open),
阵列($,'sess_close),
阵列($,'sess_read),
阵列($,'sess_write),
阵列($,'sess_destroy),
阵列($,'sess_gc)
);
session_start();
}
功能sess_open(save_path美元,美元session_name){ / /打开数据库连接
如果(!美元-> db_select_db = mysql_pconnect(美元-> db_server,美元-> db_user,美元-> db_pass)){
对不起!错误:无法连接到MySQL美元-> db_server达db_user ;
回声MySQL错误:
死;
}
如果(!mysql_select_db(美元-> db_name,美元-> db_select_db)){
对不起!MySQL数据库错误:无法选择美元-> db_name ;
死;
}
返回true;
}
功能sess_close(){
返回true;
}
功能sess_read($会话密钥){
为查询= 选择sessionarray从会话,会话密钥=$会话密钥。和sessionexptime >。时间();
不要读/过期。
结果= mysql_query美元($查询,美元-> db_select_db);
如果(列表($ sessionarray)= mysql_fetch_row($结果)){
返回的sessionarray;
}
返回false;
}
功能sess_write($会话密钥,为VARRAY){
sessionexptime美元=时间()+美元-> sess_life;
会话更新到期时间,
会话过期时间=上次更新时间+会话的最大使用长度
sessionarray美元= addslashes($ VARRAY);
为查询=插入会话(会话密钥,sessionexptime,sessionarray)值(为会话密钥。,, sessionexptime美元。
结果= mysql_query美元($查询,美元-> db_select_db);
如果(!$结果){
美元=更新课程设置查询sessionexptime =sessionexptime美元。
结果= mysql_query美元($查询,美元-> db_select_db);
}
返回$结果;
}
功能sess_destroy($会话密钥){
为查询= 删除会话,会话密钥=为会话密钥。;
结果= mysql_query美元($查询,美元-> db_select_db);
返回$结果;
}
功能sess_gc($ maxlifetime数值){
垃圾清理器/系统调用。
默认值是1440秒清除 / / A.参数可以设置在php.ini。
美元=删除查询在sessionexptime <。时间();
结果= mysql_query美元($查询,美元-> db_select_db);
返回mysql_affected_rows(美元-> db_select_db);
}
}
>
使用方法:使用session_start / /在原来的地方,用$ SESSION =新的取代(mysqlsession)
注:包括打开这个程序的数据库,在退出数据库之前,主程序不能关闭,否则会出错。
希望本文能对大家的PHP程序设计有所帮助。