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