php 数据库 session,PHP数据库保存session

lifeTime = get_cfg_var(“session.gc_maxlifetime”);

// open database-connection

$dbHandle = @mysql_connect(“localhost”,”root”,”root”);

$dbSel = @mysql_select_db(“shao”,$dbHandle);

// return success

if(!$dbHandle || !$dbSel)

return false;

$this->dbHandle = $dbHandle;

return true;

}

function close() {

$this->gc(ini_get(‘session.gc_maxlifetime’));

// close database-connection

return @mysql_close($this->dbHandle);

}

function read($sessID) {

// fetch session-data

$res = mysql_query(“SELECT session_data AS d FROM ws_sessions

WHERE session_id = ‘$sessID’

AND session_expires > “.time(),$this->dbHandle);

// return data or an empty string at failure

if($row = mysql_fetch_assoc($res))

return $row[‘d’];

return “”;

}

function write($sessID,$sessData) {

// new session-expire-time

$newExp = time() + $this->lifeTime;

// is a session with this id in the database?

$res = mysql_query(“SELECT * FROM ws_sessions

WHERE session_id = ‘$sessID'”,$this->dbHandle);

// if yes,

if(mysql_num_rows($res)) {

// …update session-data

mysql_query(“UPDATE ws_sessions

SET session_expires = ‘$newExp’,

session_data = ‘$sessData’

WHERE session_id = ‘$sessID'”,$this->dbHandle);

// if something happened, return true

if(mysql_affected_rows($this->dbHandle))

return true;

}

// if no session-data was found,

else {

// create a new row

mysql_query(“INSERT INTO ws_sessions (

session_id,

session_expires,

session_data)

VALUES(

‘$sessID’,

‘$newExp’,

‘$sessData’)”,$this->dbHandle);

// if row was created, return true

if(mysql_affected_rows($this->dbHandle))

return true;

}

// an unknown error occured

return false;

}

function destroy($sessID) {

// delete session-data

mysql_query(“DELETE FROM ws_sessions WHERE session_id = ‘$sessID'”,$this->dbHandle);

// if session was deleted, return true,

if(mysql_affected_rows($this->dbHandle))

return true;

// …else return false

return false;

}

function gc($sessMaxLifeTime) {

// delete old sessions

mysql_query(“DELETE FROM ws_sessions WHERE session_expires < ".time(),$this->dbHandle);

// return affected rows

return mysql_affected_rows($this->dbHandle);

}

}

$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();

// etc…

?>

//===============================下面这个是函数式的

/*

CREATE TABLE sessions (

session_id varchar(32) NOT NULL default '',

session_data text NOT NULL,

session_expiration timestamp NOT NULL,

PRIMARY KEY (session_id)

*/

mysql_connect("localhost","user","pass");

mysql_select_db("mydb");

function on_session_start($save_path, $session_name) {

error_log($session_name . " ". session_id());

}

function on_session_end() {

// Nothing needs to be done in this function

// since we used persistent connection.

}

function on_session_read($key) {

error_log($key);

$stmt = "select session_data from sessions ";

$stmt .= "where session_id ='$key' ";

$stmt .= "and unix_timestamp(session_expiration) > unix_timestamp(date_add(now(),interval 1 hour))”;

$sth = mysql_query($stmt);

if($sth)

{

$row = mysql_fetch_array($sth);

return($row[‘session_data’]);

}

else

{

return $sth;

}

}

function on_session_write($key, $val) {

error_log(“$key = $value”);

$val = addslashes($val);

$insert_stmt = “insert into sessions values(‘$key’, “;

$insert_stmt .= “‘$val’,unix_timestamp(date_add(now(), interval 1 hour)))”;

$update_stmt = “update sessions set session_data =’$val’, “;

$update_stmt .= “session_expiration = unix_timestamp(date_add(now(), interval 1 hour))”;

$update_stmt .= “where session_id =’$key ‘”;

// First we try to insert, if that doesn’t succeed, it means

// session is already in the table and we try to update

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值