| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
(很抱歉,由于版权原因,我不能把以下代码中的英文去掉,只好加些注释了
==================================================================================
<?
/* ------------------------------------------------------------------------
* session_mysql.php
* ------------------------------------------------------------------------
* PHP4 MySQL Session Handler
* Version 1.00
* by Ying Zhang (ying@zippydesign.com)
* Last Modified: May 21 2000
*
* ------------------------------------------------------------------------
* TERMS OF USAGE:
* ------------------------------------------------------------------------
* You are free to use this library in any way you want, no warranties are
* expressed or implied. This works for me, but I don't guarantee that it
* works for you, USE AT YOUR OWN RISK.
中国网管联盟bitsCN.com
$SESS_DBHOST = "localhost"; /* database server hostname */
$SESS_DBNAME = "sessions"; /* database name */
$SESS_DBUSER = "phpsession"; /* database user */
$SESS_DBPASS = "phpsession"; /* database password */
网管下载dl.bitscn.com
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
function sess_open($save_path, $session_name) {
global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH; 网管有家www.bitscn.net
if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {
echo "<li>Can't connect to $SESS_DBHOST as $SESS_DBUSER";
echo "<li>MySQL Error: ", mysql_error();
die;
} 网管论坛bbs_bitsCN_com
if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {
echo "<li>Unable to select database $SESS_DBNAME";
die;
} 网管网www_bitscn_com
return true;
}
function sess_close() {
return true;
} 中国网管联盟bitsCN.com
function sess_read($key) {
global $SESS_DBH, $SESS_LIFE; 网管有家www.bitscn.net
$qry = "SELECT value FROM sessions WHERE sesskey = '$key' AND expiry > " . time();
$qid = mysql_query($qry, $SESS_DBH);
网管u家bitscn.net
if (list($value) = mysql_fetch_row($qid)) {
return $value;
} 网管u家u.bitscn@com
return false;
}
网管朋友网www_bitscn_net
function sess_write($key, $val) {
global $SESS_DBH, $SESS_LIFE;
网管u家u.bitscn@com
$expiry = time() + $SESS_LIFE;
$value = addslashes($val); 网管网www_bitscn_com
$qry = "INSERT INTO sessions VALUES ('$key', $expiry, '$value')";
$qid = mysql_query($qry, $SESS_DBH); 网管朋友网www_bitscn_net
if (! $qid) {
$qry = "UPDATE sessions SET expiry = $expiry, value = '$value' WHERE sesskey
= '$key' AND expiry > " . time();
$qid = mysql_query($qry, $SESS_DBH);
}
网管朋友网www_bitscn_net
return $qid;
} 网管u家u.bitsCN.com
function sess_destroy($key) {
global $SESS_DBH; 中国网管联盟bitsCN.com
$qry = "DELETE FROM sessions WHERE sesskey = '$key'";
$qid = mysql_query($qry, $SESS_DBH);
网管联盟bitsCN@com
return $qid;
} 中国网管论坛bbs.bitsCN.com
function sess_gc($maxlifetime) {
global $SESS_DBH;
$qry = "DELETE FROM sessions WHERE expiry < " . time();
$qid = mysql_query($qry, $SESS_DBH); 中国网管论坛bbs.bitsCN.com
return mysql_affected_rows($SESS_DBH);
} 网管联盟bitsCN@com
session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");
?>
=================================================================
定制使用dbm文件时的接口
=================================================================
<?
/* ------------------------------------------------------------------------
* session_dbm.php
* ------------------------------------------------------------------------
* PHP4 DBM Session Handler
* Version 1.00
* by Ying Zhang (ying@zippydesign.com)
* Last Modified: May 21 2000
*
* ------------------------------------------------------------------------
* TERMS OF USAGE:
* ------------------------------------------------------------------------
$SESS_DBM = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); 网管u家www.bitscn.net
function sess_open($save_path, $session_name) {
global $SESS_DBM;
网管u家u.bitsCN.com
$SESS_DBM = dbmopen("$save_path/$session_name", "c");
return ($SESS_DBM);
} 网管bitscn_com
function sess_close() {
global $SESS_DBM;
网管论坛bbs_bitsCN_com
dbmclose($SESS_DBM);
return true;
}
网管u家www.bitscn.net
function sess_read($key) {
global $SESS_DBM, $SESS_LIFE;
网管u家bitscn.net
$var = "";
if ($tmp = dbmfetch($SESS_DBM, $key)) {
$expires_at = substr($tmp, 0, strpos($tmp, "│"));
网管网www.bitscn.com
if ($expires_at > time()) {
$var = substr($tmp, strpos($tmp, "│") + 1);
}
}
return $var;
}
function sess_write($key, $val) {
global $SESS_DBM, $SESS_LIFE; 网管论坛bbs_bitsCN_com
dbmreplace($SESS_DBM, $key, time() + $SESS_LIFE . "│" . $val);
return true;
}
function sess_destroy($key) {
global $SESS_DBM;
dbmdele($SESS_DBM, $key);
return true;
}
function sess_gc($maxlifetime) {
global $SESS_DBM;
中国网管论坛bbs.bitsCN.com
$now = time();
$key = dbmfirstkey($SESS_DBM);
while ($key) {
if ($tmp = dbmfetch($SESS_DBM, $key)) {
$expires_at = substr($tmp, 0, strpos($tmp, "│"));
if ($now > $expires_at) {
sess_destroy($key);
}
}
$key = dbmnextkey($SESS_DBM, $key);
}
}
网管联盟bitsCN_com
session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");
?>
=================================================================
具体怎么用就不用多说了,因为这些函数都是php引擎调用的,与我们无关的。我们只需照上述配
置后就行了,你用的还是以前的session函数。
看看下面的代码就知道了:)
网管朋友网www_bitscn_net
session定制的测试代码
==================================================================
<?
/* ------------------------------------------------------------------------
* test.php
* ------------------------------------------------------------------------
* PHP4 Customer Session Handler Test Script
* Version 1.00
* by Ying Zhang (ying@zippydesign.com)
* Last Modified: May 21 2000
*/
/* default to DBM handler */
if (! isset($handler)) {
$handler = "dbm";
} 网管u家u.bitsCN.com
/* default action is increment */
if (! isset($action)) {
$action = "increment";
} 网管朋友网www_bitscn_net
/* load up the appropriate session handling script, depending on the handler */
if ($handler == "dbm") {
include("session_dbm.php"); 网管有家bitscn.net
} elseif ($handler == "mysql") {
include("session_mysql.php");
网管网www.bitscn.com
} else {
echo "<li>Unrecognized handler ($handler)";
die;
}
中国网管论坛bbs.bitsCN.com
/* start the session and register a simple counter */
session_start();
session_register("count"); 网管u家u.bitsCN.com
/* figure out what we should do, depending on the action */
switch ($action) {
case "increment" :
$count = isset($count) ? $count + 1 : 0;
break;
case "destroy" :
session_destroy();
break; 中国网管联盟bitsCN.com
case "gc" :
$maxlife = get_cfg_var("session.gc_maxlifetime");
sess_gc($maxlife);
break;
网管网www_bitscn_com
default:
echo "<li>Unknown action ($action)";
break;
}
?>
<h1>Session Test Script</h1>
<ul>
<li>Handler: <b><?=$handler?></b>
<li>Action: <b><?=$action?></b>
<li>Count: <b><?=$count?></b>
</ul> 网管联盟bitsCN_com
<hr size=1>
<form>
<table>
<tr>
<td>Handler:</td>
<td>
<select name="handler">
<option value="dbm">DBM</option>
<option value="mysql">MySQL</option>
</select>
</td>
</tr>
<tr>
<td>Action:</td>
<td>
<select name="action">
<option value="increment">Increment</option>
<option value="destroy">Session Destroy</option>
<option value="gc">Force Garbage Collection</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td><br><input type="submit"></td>
|
0
|
评论加载中…