在数据库中保存会话
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();
?>
<?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();
?>
相关文章推荐
- php将会话保存在数据库里
- 如何在数据库中保存会话session
- 持久化会话:将数据保存至ASPState数据库,如何设定表ASPStateTempApplications和表ASPStateTempSessions的存放位置?
- PHP:在数据库中保存会话
- PHP数据库保存session会话
- 在数据库中保存会话
- 数据库里保存会话
- PHP数据库保存session会话
- tomcat+nginx+redis实现均衡负载、session共享---让Tomcat把会话Session保存到Redis数据库。
- 在数据库中保存会话session
- 关于图片保存到SQL数据库及从数据库读出显示在PictureBox中.
- jQuery实现拖动布局并将排序结果保存到数据库
- hibernate学习过程问题(1)--通过代码保存数据时,数据库始终只有一条数据
- Quartz.NET开源作业调度框架系列(五):AdoJobStore保存job到数据库
- 调用save()方法,页面显示保存成功,但是数据库中没有值的原因
- asp.net 中保存 数据库几种对象
- 【WPF】如何保存RichTextBox的文本到数据库?以及如何对RichTextBox的Document做绑定?
- winform把图片保存到数据库
- 使用JDBC将一个对象保存到数据库
- 手动排序的数据库保存