您的位置:首页 > 数据库

在数据库中保存会话

2014-04-02 17:51 211 查看
db_session.inc.php

<?php
$sdbc = NULL;

function open_session(){
global $sdbc;
//连接数据库失败结束程序
$sdbc = mysqli_connect("localhost","root","gonglishan520","xsphpdb") or die("could not connect to database");
echo "open<br>";
return true;
}

function close_session(){
global $sdbc;
echo "close<br>";
return mysqli_close($sdbc);
}

function read_session($sid){
global $sdbc;
//使用sprintf构造sql语句
$q = sprintf('select data from sessions where id="%s"',mysqli_real_escape_string($sdbc,$sid));

$r = mysqli_query($sdbc,$q);
echo "read<br>";
if(mysqli_num_rows($r) == 1){
list($data) = mysqli_fetch_array($r,MYSQLI_NUM);
}else{
return '';
}
}

function write_session($sid,$data){
global $sdbc;
//replace语句,如果查询指定的会话id与现有记录中某个主键相同,就会发生更新操作,否则就会建立一条新纪录
$q = sprintf('replace into sessions(id,data) values("%s","%s")',mysqli_real_escape_string($sdbc,$sid),mysqli_real_escape_string($sdbc,$data));
$r = mysqli_query($sdbc,$q);
echo "write<br>";
return mysqli_affected_rows($sdbc);
}

function destroy_session($sid){
global $sdbc;
$q = sprintf('delete from sessions where id="%s"',mysqli_real_escape_string($sdbc,$sid));
$r = mysqli_query($sdbc,$q);
echo "destroy<br>";
$_SEESION = array();
return mysqli_affected_rows($sdbc);
}
/*
*垃圾回收函数
*/
function clean_session($expire){
global $sdbc;
$q = sprintf('delete from sessions where date_add(last_accessed,interval %d second) < now()',(int) $expire);
$r = mysqli_query($sdbc,$q);
echo "clean<br>";
return mysqli_affected_rows($sdbc);
}
/*
*session_set_save_handler()函数不会启动会话,我们还需要调用session_start()
*如果session_set_svae_handler()之前调用session_start()函数,脚本中定义的处理函数会被忽略
*如果在php设置里session.auto_start的值是ON,就不能使用函数session_set_save_handler()
*/
session_set_save_handler('open_session','close_session','read_session','write_session','destroy_session','clean_session');

session_start();
?>

index.php
<?php
require_once('db_session.inc.php');
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html" charset="utf-8">
<title>DB Session Test</title>
</head>
<body>
<?php
/*
*这里会依次调用open_session,read_session
*/
if(empty($_SESSION)){
$_SESSION['blah'] = 'umlaut';
$_SESSION['this'] = '36152.3';
$_SESSION['that'] = 'blue';

echo '<p>Session data stored</p>';
}else{
echo '<p>Session Data Exists:<pre>'.print_r($_SESSION,1).'</pre></p>';
}

if(isset($_GET['logout'])){
/*
*这里会依次调用destroy_session,close_session
*/
session_destroy();
echo '<p>session destroy</p>';
}else{
echo '<a href="index.php?logout=true">log out</a>';
}

echo '<p>session data:<pre>'.print_r($_SESSION,1).'</pre></p>';
?>
</body>
</html>
<?php
/*
*这里会依次调用write_session,close_session
*/
session_write_close();
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: