PHP使用MySQL数据库存储会话的代码。
一个问题:如果客户端机器的cookie在病毒的情况下失败,则会话不是。隐患二:PHP中的会话,默认以文件的形式存储在临时文件夹中。对于一个小系统,这是完全可以接受的。
但是对于一个大的和经常访问的系统,它不是一个好办法。假设网站每天有1000人。一个月后,将有30000个临时文件在会话的临时文件夹。想象多久计算机要从30000到session_sid。
为了提高效率。
事务使用数据库保存会话。具体方法如下:
1。更改php.ini文件。
因为PHP默认保存会话的方式是文件,所以我们要改变它。那就是:找到session.save_handler =文件改变文件的用户。
将会话模式更改为用户定义的。
2。建立数据库:
创建表(` db_session `
` sesskey ` char(32)不为空,
过期int(11)未签名不空,
`价值`文本非空,
主键(` sesskey `)
InnoDB引擎=默认的字符集latin1);
{代码}
数据显示:db_session
栏目名称:sesskey,期满,价值:sesskey是首要关键。
该值存储在会话中的值中。
三.建立session_mysql.php文件。此文件是用来建立一个方法来保存会话。它是可以直接修改参数。
session_mysql.php
PHP代码:
复制代码代码如下所示:
< PHP
gb_dbname美元=db_mybbs ; / /数据库名称
gb_dbuser美元=根; / /数据库用户名
gb_dbpass美元=23928484; / /数据库密码
gb_dbhostname美元=localhost; / /主机名或IP地址
sess_dbh美元= ;
sess_life美元= get_cfg_var(的会议。gc_maxlifetime ); / /最大有效的会话。
功能sess_open(save_path美元,美元session_name){
全球gb_dbhostname美元,gb_dbname美元,gb_dbuser美元美元美元,gb_dbpass,sess_dbh;
如果(!sess_dbh美元= mysql_pconnect(gb_dbhostname美元美元美元,gb_dbuser,gb_dbpass)){
回声MySQL错误:mysql_error()。
(死亡);
}
如果(!Mysql_select_db ($gb_DBname, $SESS_DBH)) {
回声MySQL错误:mysql_error()。
(死亡);
}
返回true;
}
功能sess_close(){
返回true;
}
功能sess_read($键){
全球sess_dbh美元,sess_life美元;
QRY =选择美元价值从db_session哪里sesskey = ' $ key'and到期时间()>;
一块美元= mysql_query(QRY美元,美元sess_dbh);
如果(列表(美元值)= mysql_fetch_row($ QID)){
返回值;
}
返回false;
}
功能sess_write(美元美元关键,Val){
全球sess_dbh美元,sess_life美元;
到期时间(美元)+ sess_life美元=;
$值;
$ QRY =插入db_session值(美元美元关键,到期,美元价值);
一块美元= mysql_query(QRY美元,美元sess_dbh);
如果(!一块美元){
美元=更新db_session QRY设置到期=到期值=美元,美元,美元value'where sesskey =关键和到期时间()>;
一块美元= mysql_query(QRY美元,美元sess_dbh);
}
返回序号;
}
功能sess_destroy($键){
全球sess_dbh美元;
美元=删除查询db_session哪里sesskey =美元的关键;
一块美元= mysql_query(QRY美元,美元sess_dbh);
返回序号;
}
功能sess_gc($ maxlifetime数值){
全球sess_dbh美元;
美元=删除查询在<< db_session到期时间();
一块美元= mysql_query(QRY美元,美元sess_dbh);
返回mysql_affected_rows($ sess_dbh);
}
session_module_name();
session_set_save_handler(sess_open
>
4。设置测试文件。
在使用之前,你必须把新成立的session_mysql.php文件。
session_test.php
PHP代码:
复制代码代码如下所示:
< PHP
包括(session_mysql .php);
session_start();
_session美元{ ABC'} = :我会回来的!;
_session美元{ 'meto} =乙:我也是;
_session美元{ 'name' } = 路易斯;
回声点击我;
>
get_session_test.php
复制代码代码如下所示:
< PHP
包括(session_mysql .php);
session_start();
_session { echo ABC};
;
echo $ _session { 'meto};
;
_session 'name' } { echo;
_session美元{ 'wq} =12e ;
再次单击;
>
get_session_test2.php
复制代码代码如下所示:
< PHP
包括(session_mysql .php);
session_start();
_session { echo ABC};
;
echo $ _session { 'meto};
;
_session 'name' } { echo;
;
echo $ _session { 'wq};
( / / / / session_destroy);用会话销毁所有功能。
>