【问题标题】:PHP Session Handling (read function) ProblemPHP会话处理(读取函数)问题
【发布时间】:2011-01-25 11:18:06
【问题描述】:

我有一个类在我的代码中处理会话并将会话数据存储在数据库中。在读取回调函数中,我编写了一个查询并从数据库加载数据并返回值,但是当转储 $_SESSION 时这是空的!

我跟踪代码并且我的查询是正确的并且数据加载但没有设置会话值。这个问题出现在子域中,但是 session_id 和 COOKIE 是正确的。

我的读取函数代码:

function read($session_id)
{              
    $result = @mysql_query("
        SELECT
            session_data
        FROM
            session_table
        WHERE
            session_id = '".$session_id."' AND
            session_expire > '".time()."'
    ");

    if (is_resource($result) && @mysql_num_rows($result) > 0) {
        $fields = @mysql_fetch_assoc($result);
        return $fields["session_data"];
    }


        return "";

    }

我的日志:

read function log: 
            SELECT
                session_data
            FROM
                sessions_table
            WHERE
                session_id = '389dd7fc7bc19ffead7274c0ad860896' AND
                session_expire > '1295954400'
read function result log:
Array
(
    [session_data] => corret serialized data
)

write function log:
                UPDATE
                    sessions_table
                SET
                    session_data = '',
                    session_expire = '1295955840'
                WHERE
                    session_id = '389dd7fc7bc19ffead7274c0ad860896'

【问题讨论】:

  • 你的垃圾回收功能怎么样?

标签: php session


【解决方案1】:

不要使用错误抑制运算符 (@)。这就是阻止您看到您在代码中犯的错误的原因。这就是为什么您不知道错误在代码中的原因。这就是为什么您必须询问代码中的错误所在。

实际上,我也没有在您的代码中看到任何错误,但是例如如果数据库没有正确设置或者你的 SQL 语法有错误,mysql_query 会告诉你。

【讨论】:

  • 亲爱的奥斯瓦尔德:这段代码是正确的,在我的日志中这个查询有一个结果并且没有任何错误但是在返回值之后这个会话是空的。
  • @Akbar:你在会话中存储对象吗?没有预防措施就无法做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 2021-01-01
  • 2015-06-17
  • 1970-01-01
  • 2010-11-24
相关资源
最近更新 更多