代码如下:<?php
$db_res_id = pg_connect("host=localhost port=5432 dbname=abc user=postgres password=123456");function open() {
  return true;
}function close() {
  return true;
}function read() {
  return true;
}function write($sess_id, $sess_userid) {
  global $db_res_id;  $query_string = "INSERT INTO session (sess_id, sess_userid) VALUES ('$sess_id', '$sess_userid');";  echo $query_string . '<br />';  return true;
}function destroy() {
  return true;
}function gc() {
  return true;
}session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');
session_start();
$sess_id = session_id();
write($sess_id, '12345678');
执行后如下:
INSERT INTO session (sess_id, sess_userid) VALUES ('18e92405e5f379009128062fd217b90d', '12345678');
INSERT INTO session (sess_id, sess_userid) VALUES ('18e92405e5f379009128062fd217b90d', '');如何会有两个 INSERT 语句?第二个 sess_userid 还无值。何解?如何解决?

解决方案 »

  1.   

    PHP啊,这里是ASP,你发错地方了吧兄弟
      

  2.   

    兄弟,是你看错了,这里的确是 PHP。
      

  3.   

    你的函数有问题
    你改变了SESSION的存储方式,不需要你自己去调用哪些函数的
    操作SESSION还是和以前一样操作就好了,只不过现在是存放到数据库里而已
      

  4.   

    你可以将储存SESSION的表做成内存表
    你可能是要存储一个用户的ID吧,你可以在用户登录完成后,你直接去修改这个表里的数据,而不需要再调用一次write函数。
    还有就是SESSION的超时也要写到这些函数里。
    这是我以前写的一些代码:
    function sess_open($save_path,$session_name) {
    $strsql = "Delete From ".Cls_Data::$mPrefix."sessions Where expiry < ".time();
    Cls_Data::Query($strsql);
    return true;
    }    function sess_close() {
    return true;
    } function sess_read($key) {

    $strsql = "Select value From ".Cls_Data::$mPrefix."sessions Where sid = '".$key."' And expiry >".time();
    $query = Cls_Data::Query($strsql);
    if($qrs = Cls_Data::Execute($query)) {
    return $qrs[0];
    } else {
    return false;
    }
    } function sess_write($key,$val) {
    $strsql = "Select value From ".Cls_Data::$mPrefix."sessions Where sid = '".$key."' And expiry >".time();
    $query = Cls_Data::Query($strsql);
    if($qrs = Cls_Data::Execute($query)) {
    $strsql = "Update ".Cls_Data::$mPrefix."sessions Set value='".$val."',expiry=".(time()+Cls_Data::$mSessionLifeTime)." Where sid='".$key."' And expiry>".time();
    Cls_Data::Query($strsql);
    } else {
    $strsql = "Insert Into ".Cls_Data::$mPrefix."sessions VALUES('".$key."',".(time()+Cls_Data::$mSessionLifeTime).",'".$val."')";
    Cls_Data::Query($strsql);
    }
    return true;
    } function sess_destroy($key) {

    $strsql = "Delete From ".Cls_Data::$mPrefix."sessions Where sid = '".$key."'";
    Cls_Data::Query($strsql);
    return true;
    } function sess_gc($maxlifetime) {

    $strsql = "Delete From ".Cls_Data::$mPrefix."sessions Where expiry <".time();
    Cls_Data::Query($strsql);
    return true;
    }
    session_module_name('user');
    session_set_save_handler('sess_open','sess_close','sess_read','sess_write','sess_destroy','sess_gc');
    session_start();