PHP $ _SESSION值未正确设置

时间:2014-03-21 11:04:00

标签: php mysql session

我在PHP中有一个简单的登录页面,它在mysql数据库中查找提供的用户名和密码,并在找到用户时设置php $ _SESSION变量。它主要工作正常,除了$ _SESSION [' user_type_id']的值为1,无论$ row [0] [" user_type_id"]的值是多少。

下面的代码中的

var_dump($ row [0] [" user_type_id"])确认它具有正确的值,var_dump($ _ SESSION)(与第一个var_dump一起)显示$ _SESSION [& #39; user_type_id']始终为1.

$ row值是一个int而$ _SESSION值是一个字符串,我不知道这是否相关。我唯一能想到的是我在其他地方重置会话变量,但我不记得这样做,我无法在任何地方发现它。

我试图使用此值来控制权限。任何人都可以看到我出错的地方吗?

这是会话代码

public static function new_session ($username, $pw, $inactive) {

    $db = mydb::getConnection();

    $statement = $db->prepare('SELECT * FROM users WHERE username = :parameter1 AND `password` = :parameter2');
    $statement->bindValue(':parameter1', $username);
    $statement->bindValue(':parameter2', $pw);
    $statement->execute();
    $row = $statement->fetchAll();

    var_dump ($row[0]["user_type_id"]);

    if (count($row) == 1) {

        session_start();
        ini_set('session.gc_maxlifetime', 60 * 20);

        $_SESSION['name'] = $row[0]['username'];
        $_SESSION['id'] = $row[0]['id'];
        $_SESSION['user_type_id'] = $row[0]["user_type_id"];

        $_SESSION['max'] = $inactive;
        $_SESSION['timeout'] = time() + $inactive;
        $_SESSION['loggedin'] = true;

        return true;

    } else {
        return false;
    }

}

这是var_dump的输出($ row [0] [' user_type_id'])

int(500)

这是var_dump的输出($ _SESSION [' user_type_id'])

string(1) "1"

编辑:下面是var_dump($ result)的输出,如下所示@ user3314428

array(5) {
  ["id"]=>
  int(2)
  ["user_type_id"]=>
  int(500)
  ["username"]=>
  string(5) "shane"
  ["password"]=>
  string(8) "***"
  ["email"]=>
  string(13) "***@***.**"

}

var_dump($ _SESSION [' user_type_id']仍为字符串(1)" 1"

2 个答案:

答案 0 :(得分:0)

我不知道造成问题的原因。但通常我会使用这种格式进行登录。

if(!isset($_SESSION) session_start();    
public static function new_session ($username, $pw, $inactive) {

$db = mydb::getConnection();

$statement = $db->prepare('SELECT * FROM users WHERE username = :parameter1 AND `password` = :parameter2');
$statement->bindValue(':parameter1', $username);
$statement->bindValue(':parameter2', $pw);
$statement->execute();
if($statement->rowCount()==1)
{
  $result = $statement->fetch(PDO::FETCH_ASSOC);
  $_SESSION['user_type_id']=$result['user_type_id'];
  $_SESSION['var2']= $result['var2'];
  //and so on
}

答案 1 :(得分:0)

session_start()应位于页面的顶部,而不是函数内部