【问题标题】:trying to set session variable试图设置会话变量
【发布时间】:2012-08-23 17:07:09
【问题描述】:
if(isset($_SESSION['admin'])) {
echo "<li><b>Admin</b></li>";
}

<?php
session_name('MYSESSION');
session_set_cookie_params(0, '/~cgreenheld/');
session_start();

$conn = blah blah
$query2 = 'Select Type from User WHERE Username = "'.$_SESSION['user'].'" AND Type =\'Admin\'';
$result2 = $conn->query($query2);
if($result2->num_rows==1) {
$_SESSION['admin'] = $result2;
}
?>

嗨,我正在尝试设置此会话变量,但似乎没有设置,我想知道是否有人可以提供帮助。如果 session['admin'] isset 它应该回显管理按钮。 但我不太确定为什么? (我确实有会话开始和每个页面上的所有内容,这不是问题或任何“您没有 php 标签”我已经检查了 mysql 查询,它确实从我的表中返回了一些东西。有什么想法吗?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您的session_start(); 应该在与会话变量有关的任何事情之前位于页面顶部。

    来自the docs

    当 session_start() 被调用或会话自动启动时,PHP 将调用打开和读取会话保存处理程序。

    从 cmets 编辑:

    <?php
        session_name('MYSESSION');
        session_set_cookie_params(0, '/~cgreenheld/');
        session_start();
        // Moved to start after answer was accepted for better readability
        // You had the <?php after this if statement? Was that by mistake?
        if(isset($_SESSION['admin'])) 
        {
            echo "<li><b>Admin</b></li>";
        }
    
        // If you have already started the session in a file above, why do it again here?
    
        $conn = blah blah;
        $query2 = 'Select Type from User WHERE Username = "'.$_SESSION['user'].'" AND Type =\'Admin\'';
        // Could you echo out the above statement for me, just to 
        // make sure there aren't any problems with your sessions at this point?
        $result2 = $conn->query($query2);
        if($result2->num_rows==1) 
        {
            $_SESSION['admin'] = $result2;
            // It seems you are trying to assign the database connection object to it here.
            // perhaps try simply doing this:
            $_SESSION['admin'] = true;
        }
    ?>
    

    从其他 cmets 编辑 2:

    您必须像这样实际获取数据 - 从this tutorial 截取,这可能会帮助您更多:

    $query  = "SELECT name, subject, message FROM contact";
    $result = mysql_query($query);
    
    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        echo "Name :{$row['name']} <br>" .
         "Subject : {$row['subject']} <br>" .
         "Message : {$row['message']} <br><br>";
    } 
    

    但是话虽如此,当我们在谈论它时,您最好不要使用旧的 mysql_* 函数,而改用 PDO 会更好。

    【讨论】:

    • 查看@courtney 对我的回答的评论。
    • 从用户中选择类型 WHERE Username = "cgreenheld" AND Type ='Admin'
    • @courtney if 语句中的 cmets 怎么样?
    • 好吧,所以我把它设置得太真实了,它会在那个页面上回显管理员,但不会在我的其余页面上?
    • @courtney 您是否已将该代码添加到您的所有页面?还要仔细检查session_start();
    【解决方案2】:

    session_start(); 移至页面顶部。您正在尝试检索未加载的会话。

    编辑:尝试回显$_SESSION['admin'],如果它甚至包含某些内容。还可以尝试通过在其中添加 echo('its working');die('its working'); 来调试您的 if($result2-&gt;num_rows==1) 代码,以检查 $result2 是否恰好包含 1 行,因为目前似乎 $result2 包含超过 1 行或根本没有行。

    【讨论】:

    • 这些在两个单独的文件中,我忘了提,并且最高位有一个会话开始,最高位在一个单独的文件中
    • 当我回显它正在工作时,它会回显它的工作,所以我认为它没有分配会话变量
    • @courtney 看看我对我的回答所做的编辑 - 特别是关于你分配给会话变量的内容。
    • @courtney 是正确地回显 $_SESSION['admin'] 还是 if 语句中的文本?
    • 我认为问题在于$result2 = $conn-&gt;query($query2); ,然后是$_SESSION['admin'] = $result2;。将其设置为简单的 bool 可能会起到作用。无论如何,这似乎是稍后要检查的内容。
    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多