<?php
// ini_set(‘session.save_handler‘,
‘user‘);
// 注意 set_session_save_handler() 一定要在
session_start()前执行
// session.gc_probability
=1 //session
回收机制的概率分子
// session.gc_divisor =
1000 // session 回收机制的概率分母
//
session.gc_maxlifetime = 1440 // session 有效期
// 当开启
session 时,如 session_start(),
// 执行顺序为 sess_open() ->
sess_read()->sess_write() -> sess_close() ->sess_destroy() ->
sess_gc()
ini_set("session.save_handler", "user"); //
自定义保存方式
function sess_open($sess_path, $sess_name)
{
echo "session 路径:" . $sess_path . "<br />";
echo "session名称:" . $sess_name . "<br />";
return true;
}
function sess_close()
{
echo "session 关闭<br />";
return
true;
}
function sess_read($sess_id)
{
echo
"读取session id :" . $sess_id . "<br />";
return
true;
}
function sess_write($sess_id,
$data)
{
echo "写入数据 session id " . $sess_id . "<br
/>";
echo "session 数据 " . $data . "<br
/>";
return true;
}
function
sess_destroy($sess_id)
{
echo "销毁 session id " .
$sess_id . "<br />";
return
true;
}
function sess_gc($sess_maxlifetime)
{
echo "session 回时机制,每隔时间为 " . $sess_maxlifetime;
return true;
}
session_set_save_handler("sess_open",
"sess_close", "sess_read", "sess_write", "sess_destroy",
"sess_gc");
session_start();
$_SESSION[‘lin‘] = ‘lin3615‘;
echo ‘hi,
world ‘;
$_SESSION[‘long‘] = ‘good luck for you‘;
// 开启 cookie 时,默认时会以
session 名称 PHPSESSID 为了cookie 为记录
// 如 $_COOKIE[‘PHPSESSID‘] = session_id;
值即为session_id值
print_r($_COOKIE);
?>
// 以下为保存在数据库中
<?php
数据库为 test
数据表结构
CREATE TABLE `ws_sessions` (
`session_id` varchar(255) NOT
NULL default ‘‘,
`session_expires` int(11) unsigned NOT NULL default
‘0‘,
`session_data` text,
PRIMARY KEY
(`session_id`)
)
class session
{
public
$lifeTime;
public $dbHandler;
function open($savePath, $sessName)
{
$this->lifeTime =
get_cfg_var("session.gc_maxlifetime");
$dbHandler = mysql_connect(‘localhost‘, ‘root‘,
‘rootlin3615‘);
$dbSel =
mysql_select_db(‘test‘, $dbHandler);
if(!$dbHandler || !$dbSel)
return false;
$this->dbHandler = $dbHandler;
return true;
}
function close()
{
$this->gc(ini_get("session.gc_maxlifetime"));
return
mysql_close($this->dbHandler);
}
function read($sessID)
{
$res = mysql_query("select session_data as d from
ws_sessions
where session_id=‘{$sessID}‘
and session_expires > " . time(),
$this->dbHandler);
if($row =
mysql_fetch_assoc($res))
return $row[‘d‘];
return
‘‘;
}
function write($sessID,
$sessData)
{
$newExp = time()+$this->lifeTime;
$res = mysql_query("select * from ws_sessions
where
session_id=‘{$sessID}‘", $this->dbHandler);
if(mysql_num_rows($res))
{
mysql_query("update ws_sessions set session_data =
‘{$sessData}‘",$this->dbHandler);
if(mysql_affected_rows($this->dbHandler))
return
true;
}else
{
mysql_query("insert into ws_sessions (
session_id,
session_expires, session_data)
values(‘{$sessID}‘, ‘{$newExp}‘, ‘{$sessData}‘)",
$this->dbHandler);
if(mysql_affected_rows($this->dbHandler))
return
true;
}
return false;
}
function destroy($sessID)
{
mysql_query("delete from
ws_sessions where session_id = ‘{$sessID}‘",
$this->dbHandler);
if(mysql_affacted_rows($this->dbHandle))
return true;
return false;
}
function gc($sessMaxLifeTime)
{
mysql_query("delete from
ws_sessions where session_expires < " . time(),
$this->dbHandler);
return
mysql_affected_rows($this->dbHandler);
}
}
ini_set("seession.save_handler", ‘user‘);
$session = new
session();
session_set_save_handler(array($session,"open"),
array($session,"close"),
array($session,"read"),
array($session,
"write"),
array($session, "destroy"),
array($session,
"gc"));
session_start();
//把上面整理为一个文件,然后包含进来,就可以像把 session保存在文件的方式使用了
// 如下
$_SESSION[‘lin‘] = ‘hi,lin3615‘;
print_r($_SESSION);