分类

  • 软件天地

  • 介绍使用数据库保存session的方法‖
    就会出现一个问题,当一个
    相关操作将无法执行。因此
    并且在性能和扩展性等方面
    同时要将php.ini里的sessi
    linux(freesd)+apache+mys
    文件方式保存在服务器端,并且
    用户由于某种安全原因关闭了浏
    ,如果能以数据库保存session
    有一个飞跃。程序中使用关键函
    on.save_handler = files 改为
    ql+php。
    在客户端使用cookie保存变量,这
    览器的cookie,程序中的session
    数据,将不受客户端设置的限制,
    数是session_set_save_handler,
    user。这里我们讨论的环境是


      数据表结构:[sessions]                                             
      CREATE TABLE sessions (                               
      sesskey char(32) not null,                         
      expiry int(11) unsigned not null,           
      value text not null,                                     
      PRIMARY KEY (sesskey)                                   
      );                                                                         

      程序代码:[session_inc.php]                                 
      < ?php                                                           
      $SESS_DBHOST = "your
    host"; /* database server ho
    stname */

      $SESS_DBNAME = "your
    db"; /* database name */
      $SESS_DBUSER = "youruser"; /* da
    tabase user */
      $SESS_DBPASS = "yourpassword"; /
    * database password */

      $SESS_DBH = "";                                               
      $SESS_LIFE = get_cfg
    _var("session.gc_maxlifetime
    ");

      function sess_open($save_path, $
    session_name) {
        global $SESS_DBH
    OST, $SESS_DBNAME, $SESS_DBU
    SER, $SESS_DBPASS, $SESS_DBH;

        if (! $SESS_DBH
    $SESS_DBPASS)) {
    = mysql_pconnect($SESS_DBHOS

    T, $SESS_DBUSER,

          echo "< li>Can't connect to $SESS_DBHOST as $SESS_DBUSER";

          echo "< li>MySQL Error: " . mysql_error();

          die;                                                             
        }                                                                       

        if (! mysql_sele
    ct_db($SESS_DBNAME, $SESS_DB
    H)) {
          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 session_tbl WHERE sesskey = '$key' AND expiry > " . time();

        $qid = mysql_query($qry, $SESS_DBH);

        if (list($value) = mysql_fet
    ch_row($qid)) {
          return $value;                                         
        }                                                                       

        return false;                                               
      }                                                                           

      function sess_write($key, $val) {           
        global $SESS_DBH, $SESS_LIFE;               

        $expiry = time() + $SESS_LIF
    E; //过期时间
        $value = addslashes($val);                     

        $qry = "INSERT I
    NTO session_tbl VALUES ('$ke
    y', $expiry, '$value')";
        $qid = mysql_query($qry, $SESS_DBH);

        if (! $qid) {                                               
          $qry = "UPDATE session_tbl SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time();


          $qid = mysql
    _query($qry, $SESS_DBH);
        }                                                                       

        return $qid;                                                 
      }                                                                           

      function sess_destroy($key) {                   
        global $SESS_DBH;                                       

        $qry = "DELETE FROM session_
    tbl WHERE sesskey = '$key'";
        $qid = mysql_query($qry, $SESS_DBH);

        return $qid;                                                 
      }                                                                           

      function sess_gc($maxlifetime) {             
        global $SESS_DBH;                                       

        $qry = "DELETE F
    ROM session_tbl WHERE expiry
    < " . time();
        $qid = mysql_query($qry, $SESS_DBH);


        return mysql_aff
    ected_rows($SESS_DBH);
      }                                                                           

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

      session_start();                                             
      ?>


      完成以上步骤后,在程序中使用requ
    可,其他的session函数还是象以前一样
    ire("session_inc.php")来代替session_start()即
    的方法调用。

    上一页 下一页




    map