2010年8月29号

今天把应用从wmap/www下移到了E盘下。然后修改了apache的httpd.cnf文件,保证输入http://localhost:8088时能正常访问。

结果发现在页面的尾端有显示Warning: Unknown: Failed to write session data (user). Please verify that the current setting of session.save_path is correct (c:/wamp/tmp) in Unknown on line 0
这个错误之前有见过的,但忘了是如何处理的。现在补上。

1,因为dig4u是把用户的session保存到数据库的,因此session_sav_handler应设为user.

2,建立相关的session表结构。

 

刚才在网上找到一个更详细的。再转过来以备份:

 

将PHP中的Session保存到数据库中,使用sessin_set_save_handler()函数。网上查了一下,说这方面的倒是不少,但是没有一个完全可用的代码示例,初学者不太容易掌握,这里给出详细的使用介绍及代码示例(参考了网上的文章)。

php保存session 默认的是采用的文件的方式来保存的,然而session是要时时刻刻的使用的,大量的用户需要创建很多的session文件,这样对整个的服务器带来性能问题,另一方面,如果服务器起采用群集的方式的话就不能保持session的一致性,所以需要采用数据库的方式来保存session,这样,不管有几台服务器同时使用,只要把它们的session保存在一台数据库服务器上就可以保存session的完整了,具体如何实现如下:

  1. php的session默认的情况下是采用的文件方式来保存的,我们在php的配置文件php.ini中可以看到这样的一行,session.save_handler="files",这样的意思就是采用文件来保存session 的,要采用数据库来保存的话,我们需要修改成user模式,即 session.save_handler="use"就可以了,但是,这仅仅是说明我门没有采用文件的方式存储session,我们还要选择数据库和建立数据库的表。
  2. 建立数据库和数据库的表结构,我们可以采用php可以使用的任何的数据库,这里使用mysql来做事例,可以根据需要可以使用其它数据库,同时因为mysql默认的存储引擎MyISAM没有事务处理的功能,这也比别的数据库更快。
  3. 创建数据库和对应的表

//创建数据库

create database session;

//创建表
create table session (id char(100) primary key,data varchar(5000));

4.编写SESSION处理函数(这里是最简化的程序)

<?php

$con =mysql_connect("127.0.0.1","root" , "111111");
mysql_select_db("session");
function open($save_path, $session_name)
{
    return(true);
}

function close()
{
    return(true);
}

function read($id){
 $sql = "SELECT * FROM session WHERE id='$id'";
 //echo $sql;
 if($result = mysql_query($sql)){
  $row = mysql_fetch_array($result);
  //var_dump($row);
  return $row["data"];
   }
   else{
        return "";
   }
}

function write($id, $sess_data){
 //echo "write".$id.":".$sess_data."<br>";
 $r = mysql_query("select * from session where id='$id'");
 if(mysql_num_rows($r) > 0){
  $sql = "update session set data='$sess_data' where id='$id'";
  $result = mysql_query($sql);
  if($result){
   return true;
   }
   else{
   return false;
   }
 }else{
  $sql = "insert into session(id,data) values ( '$id', '$sess_data')";
  //echo $sql;
  $result = mysql_query($sql);
  if($result){
   return true;
   }
   else{
   return false;
   }
 }
}

function destroy($id) {
    if($result = mysql_query("DELETE * FROM  session WHERE id='$id'")){
        return true;
    }
    else{
      return false;
    }
}

/*********************************************
* WARNING - You will need to implement some *
* sort of garbage collection routine here.  *
*********************************************/
function gc($maxlifetime)
{
  return true;
}

session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

 

 

 

 

 

将代码保存为session_user_start.php。

SESSION保存到数据库中的基本工作完成,在需要session的时候,包含文件session_user_start.php即可(最好文件的第一行include),SESSION的使用方法和使用files方式的完全一样。

5.一个使用session的例子。

请下载附件代码

 

将PHP中的Session保存到数据库中,使用sessin_set_save_handler()函数。网上查了一下,说这方面的倒是不少,但是没有一个完全可用的代码示例,初学者不太容易掌握,这里给出详细的使用介绍及代码示例(参考了网上的文章)。

有问题可以到(http://blog.opendigest.org)在本文后留言!

 


//proceed to use sessions normally

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值