PHP SESSION变量麻烦

时间:2014-01-14 13:46:06

标签: php session

我很抱歉打扰你,我尽力解决这个问题,但我不确定我哪里出错了,我想知道是否有人会愿意帮忙!

基本上,我遇到了一些$ _SESSION变量的问题;我希望每次访问者都能访问该页面时会显示不同的内容消息。以下代码首次登陆页面时似乎会跳过第一个“content1”,并显示“content2”相反,然后再次访问“content3”。我已经进行了一次未设置的调用,最终将其发送到那里,我没有正确使用_SESSIONS吗?

我不确定会话变量是如何分配给1的,因为它在if === 1语句中正确着陆而没有首先返回原始的“content1”

if (empty($_SESSION)) {
        session_start();
    }

    if (!isset($_SESSION['content'])) {
        $content = "content1";
        $_SESSION['content'] = 1;
        return $content;
    }
    elseif ($_SESSION['content'] === 1) {
        $content = "content2";
        $_SESSION['content'] = 2;
        return $content;
    }
    elseif($_SESSION['content'] === 2) {
        $content = "content3";
        unset($_SESSION['content']);
        return $content;
    }

对于bab呀学语的道歉或者这是否是我的简单修复/误解。这引起了很大的麻烦!

非常感谢。

-edit-

这是一个从同一个类中调用的函数,它在任何地方都没有经过循环。

2 个答案:

答案 0 :(得分:5)

如果尚未创建会话,则只调用session_start();

其他时候,当它是1或2时呢?

无论您的session_start();声明

,都请致电if (empty($_SESSION)) {

答案 1 :(得分:0)

您应始终使用session_start()功能。如果会话存在,它将继续,否则它将创建一个新会话。

您的代码可以简化为以下内容:

// Start/Resume session
session_start();

// Get content
function display_message()
{
    if ( ! isset($_SESSION['content']))
    {
        $_SESSION['content'] = 1;
    }

    if ($_SESSION['content'] == 1)
    {
        ++$_SESSION['content']; // Increment session value
        return 'Content #1';
    }
    elseif ($_SESSION['content'] == 2)
    {
        ++$_SESSION['content']; // Increment session value
        return 'Content #2';
    }
    elseif ($_SESSION['content'] == 3)
    {
        unset($_SESSION['content']); // Remove session value
        return 'Content #3';
    }
}

// Display content
echo display_message();

但是,如果有人第四次访问您的网页,系统会再次显示第一条消息(因为会话值不再跟踪他们显示的内容)。

使用cookie跟踪此信息可能会更好地处理这种功能吗?