各位好,没人回复 就我来吧!
下面共三个文件:
test1.php 注册了三个变量
<?
require("session_mysql.php");//注意:一定要在session_start() 之前调用,否则 后果自负
session_start(); // 开始session
$a11="1";
$a12="2";
$a13="3";
session_register("a11");
session_register("a12");
session_register("a13");
echo $a11,$a12,$a13;?>test2.php 输出 并追加新值
<?include("session_mysql.php");
session_start();
echo $a11," ",$a12," ",$a13;
if(!session_is_registered("baaa4")) { // 如果不存在则新建 
$baaa4="新值";
session_register("baaa4");//追加一个变量 }
else
echo "<br> \$baaa4 已经存在"; ?>
//session_mysql.php 被调用函数,自己改变其中的连接信息
建表:
CREATE TABLE sessions ( 
sesskey char(32) not null, 
expiry int(11) unsigned not null, 
value text not null, 
PRIMARY KEY (sesskey) 
); <?
$SESS_DBHOST = "localhost"; /* database server hostname */
$SESS_DBNAME = "sessions"; /* database name */
$SESS_DBUSER = "ck"; /* database user */
$SESS_DBPASS = "ok"; /* database password */$SESS_DBH = "sessions";
$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;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;
}if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {
echo "<li>Unable to select database $SESS_DBNAME";
die;
}return true;
}function sess_close() {
return true;
}function sess_read($key) {
global $SESS_DBH, $SESS_LIFE;$qry = "SELECT value FROM sessions WHERE sesskey = '$key' AND expiry > " . time();
$qid = mysql_query($qry, $SESS_DBH);if (list($value) = mysql_fetch_row($qid)) {
return $value;
}return false;
}function sess_write($key, $val) {
global $SESS_DBH, $SESS_LIFE;$expiry = time() + $SESS_LIFE;
$value = addslashes($val);$qry = "INSERT INTO sessions VALUES ('$key', '$expiry', '$value')";
$qid = mysql_query($qry, $SESS_DBH);if (! $qid) {
$qry = "UPDATE sessions SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time();
$qid = @mysql_query($qry, $SESS_DBH);
if(!$qid) {echo "djfdjf";}
}return $qid;
}function sess_destroy($key) {
global $SESS_DBH;$qry = "DELETE FROM sessions WHERE sesskey = '$key'";
$qid = mysql_query($qry, $SESS_DBH);return $qid;
}function sess_gc($maxlifetime) {
global $SESS_DBH;$qry = "DELETE FROM sessions WHERE expiry < " . time();
$qid = mysql_query($qry, $SESS_DBH);return mysql_affected_rows($SESS_DBH);
}session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");
?>

解决方案 »

  1.   

    另外,有dbm支持的,不过我没调试,下面是函数(如果你不想用数据库存储,而想就用默认的支持的话,只需去掉require("session_mysql.php");或include("session_mysql.php");就行,再说一下,require和include在此处没有区别。)<? 
    /* ------------------------------------------------------------------------ 
    * session_dbm.php 
    * ------------------------------------------------------------------------ 
    * PHP4 DBM Session Handler 
    * Version 1.00 
    * by Ying Zhang ([email protected]
    * 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. 

    * While not required to do so, I would appreciate it if you would retain 
    * this header information. If you make any modifications or improvements, 
    * please send them via email to Ying Zhang <[email protected]>. 

    * ------------------------------------------------------------------------ 
    * DESCRIPTION: 
    * ------------------------------------------------------------------------ 
    * This library tells the PHP4 session handler to write to a DBM file 
    * instead of creating individual files for each session. 

    * ------------------------------------------------------------------------ 
    * INSTALLATION: 
    * ------------------------------------------------------------------------ 
    * Make sure you have DBM support compiled into PHP4. Then copy this 
    * script to a directory that is accessible by the rest of your PHP 
    * scripts. 
    *确信你的php4有DBM支持。拷贝这个文件在你的php脚本目录。 
    * ------------------------------------------------------------------------ 
    * USAGE: 
    * ------------------------------------------------------------------------ 
    * Include this file in your scripts before you call session_start(), you 
    * don't have to do anything special after that. 
    * 在调用session_start()之前请包含这个文件。之后就不需要作什么工作了。 
    */ $SESS_DBM = ""; 
    $SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); function sess_open($save_path, $session_name) { 
    global $SESS_DBM; $SESS_DBM = dbmopen("$save_path/$session_name", "c"); 
    return ($SESS_DBM); 
    } function sess_close() { 
    global $SESS_DBM; dbmclose($SESS_DBM); 
    return true; 
    } function sess_read($key) { 
    global $SESS_DBM, $SESS_LIFE; $var = ""; 
    if ($tmp = dbmfetch($SESS_DBM, $key)) { 
    $expires_at = substr($tmp, 0, strpos($tmp, "|")); if ($expires_at > time()) { 
    $var = substr($tmp, strpos($tmp, "|") + 1); 

    } return $var; 
    } function sess_write($key, $val) { 
    global $SESS_DBM, $SESS_LIFE; dbmreplace($SESS_DBM, $key, time() + $SESS_LIFE . "|" . $val); 
    return true; 
    } function sess_destroy($key) { 
    global $SESS_DBM; dbmdelete($SESS_DBM, $key); 
    return true; 
    } function sess_gc($maxlifetime) { 
    global $SESS_DBM; $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); 

    } session_set_save_handler( 
    "sess_open", 
    "sess_close", 
    "sess_read", 
    "sess_write", 
    "sess_destroy", 
    "sess_gc"); 
    ?>