首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话不会保存到mysql

问会话不会保存到mysql
EN

Stack Overflow用户
提问于 2012-03-16 02:24:26
回答 2查看 263关注 0票数 0

我有一个文件sess_function.php

该文件列出了用于控制会话的各种(6)函数。

代码语言:javascript
复制
function _open()
{
    try{
        // Open the database
        $dbh = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
        $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
    } //try
    catch(PDOException $e){
        echo "Oops, We're experiencing an error CONNECTING.";
        file_put_contents('PDODBConnectionErrors.txt', $e->getMessage(), FILE_APPEND);  
    } //catch
}   

## Kill Connection to Mysql (Using PDO) 
function _close(){
$dbh = null;
}

## Read a current session 
function _read($id){
    try{
        // Open the database
        $dbh = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
        $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
        // Begin Query
        $id = mysql_real_escape_string($id);
        $sth = $dbh->prepare("SELECT data FROM sessions WHERE id = '$id'");
        $sth->execute();

    }
    catch(PDOException $e){
        echo "Oops, We're experiencing an error. READING";
        file_put_contents('PDODBConnectionErrors.txt', $e->getMessage(), FILE_APPEND);  
    } //catch

    ## return '';
}

## Write to current session 
function _write($id, $data){
    // WRITE Vars
    try{
        // Open the database
##      require_once('dbi.php');
        $dbh = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
        $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
        // Begin Query
        $access = time();
        $id = mysql_real_escape_string($id);
        $access = mysql_real_escape_string($access);
        $data = mysql_real_escape_string($data);
        $sth = $dbh->prepare("REPLACE INTO sessions VALUES ('$id', '$access', '$data')");
        $sth->execute();
    }
    catch(PDOException $e){
        echo "Oops, We're experiencing an error. REPLACING SESSION VAL";
        file_put_contents('PDODBConnectionErrors.txt', $e->getMessage(), FILE_APPEND);  
    } //catch

}

## Destroy current session
function _destroy($id){   
    try{
        // Open the database
##      require_once('dbi.php');
        $dbh = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
        $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
        // Begin Query
        $id = mysql_real_escape_string($id);
        $sth = $dbh->prepare("DELETE FROM sessions WHERE id = '$id'");
        $sth->execute();
    }
    catch(PDOException $e){
        echo "Oops, We're experiencing an error.";
        file_put_contents('PDODBConnectionErrors.txt', $e->getMessage(), FILE_APPEND);  
    } //catch  
}

## Clean old session data out 
function _clean($max){
    try{
        // Open the database
##      require_once('dbi.php');
        $dbh = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
        $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
        // Begin Query
        $old = time() - $max;
        $old = mysql_real_escape_string($old);
        $sth = $dbh->prepare("DELETE FROM sessions WHERE  access < '$old'");
        $sth->execute();
    }
    catch(PDOException $e){
        echo "Oops, We're experiencing an error. DEL FROM SESSION";
        file_put_contents('PDODBConnectionErrors.txt', $e->getMessage(), FILE_APPEND);  
    } //catch

}

和index.php

代码语言:javascript
复制
////////////////////////////////////////////////////////////////////////////////////
###### Require Database ######                              ////////////////////////
####### DB Config Setting #######
$host ='localhost'; //////////////
$dbname ='mydb';//////////
$user ='root';     //////////////
$pass ='';         //////////////
/////////////////////////////////


                        ////////////////////////
////////////////////////////////////////////////////////////////////////////////////
###### Start session                                        ////////////////////////
session_start();                                            ////////////////////////
###### Call Session Functions Include ######                ////////////////////////            
require_once('src/cfg/sess_function.php');                  ////////////////////////
###### Call function as contained in sess_function() ######                       //
session_set_save_handler('_open','_close','_read','_write','_destroy','_clean');  //                            
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////

这张桌子看起来是:

​

问题是:它没有给我带来任何问题,但是sessions表中没有存储任何东西.

如果我取消注释session_start();,它会抛出以下警告:

代码语言:javascript
复制
Oops, We're experiencing an error. READING
Warning: session_start() Cannot send session cookie - headers already sent by sess_function.php:33)index.php on line 12

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started sess_function.php:33) in index.php on line 12

有人吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-16 13:27:22

第一个错误消息是您应该查看的内容。PHP需要发送header数据( cookie),但是在sess_function.php中已经有了一些输出。头数据不能在常规输出后发送(例如,echo)。您可以打印"Oops,我们正在经历一个错误。读“,这是PHP抱怨的输出。删除所有echo语句将解决会话问题。

然后:没有设置$dbname、$user、$pass和$host变量。global $dbname, $host, $user, $pass;声明修正了这一点。

最后:必须在session_set_save_handler之前调用session_start,否则PHP不会调用自定义函数。输出已经发送错误,因为MySQL错误是在session_start完成运行之前触发的( MySQL错误发生在session_start中)

票数 1
EN

Stack Overflow用户

发布于 2012-03-16 04:31:16

为什么您的session_start()被注释了?试着打开它

你在自动会话开始吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9731018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档