【问题标题】:PHP Session is NullPHP 会话为空
【发布时间】:2016-10-15 05:16:36
【问题描述】:

我的脚本是如何工作的:

  1. index.php 获取文件将其发送到 jscript 进行分析,然后将其发送到应该是会话的 upload.php。

但会话为空。 如果我去 upload.php 并打印变量,它会显示我的用户号 2(有效)

require_once("user/upload_session.php");
if (!isset($_SESSION)) { session_start();}

登录创建会话:

public function doLogin($uname,$umail,$upass)
{
    try
    {
        $stmt = $this->conn->prepare("SELECT id, user_name, email, pass FROM accounts WHERE user_name=:uname OR email=:umail ");
        $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail));
        $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
        if($stmt->rowCount() == 1)
        {
            if(password_verify($upass, $userRow['pass']))
            {
                $_SESSION['user_session'] = $userRow['id'];
                  $thatsmysession = $_SESSION['user_session']; 
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
}

我正在使用这个:

if (empty($thatsmysession)) {
    // Query if user is NOT logged in
    $q = $db->prepare('INSERT INTO files (hash, originalname, filename, size, date, ' .
                      'expire, delid, ip) VALUES (:hash, :orig, :name, :size, :date, ' .
                      ':exp, :del, :ip)');
} else {
          
    // Query if user is logged in (insert user id together with other data)
    $q = $db->prepare('INSERT INTO files (hash, originalname, filename, size, date, ' .
                      'expire, delid, user, ip) VALUES (:hash, :orig, :name, :size, ' .
                      ':date, :expires, :delid, :user, :ip)');
    $q->bindValue(':user', $thatsmysession, PDO::PARAM_INT);
}

只有在$q->bindValue(':user', $thatsmysession, PDO::PARAM_INT); 的会话是null 但如果我回显以测试变量是否正确,它可以工作

【问题讨论】:

    标签: php session post


    【解决方案1】:

    您对现有会话的检查是错误的。试试这个线程中提到的: Check if PHP session has already started

    【讨论】:

    • 不正确,但在我使用过的所有版本(5.3.6、5.4、5.5 和 5.6)中仍然有效
    • 这和你链接我的一样 if(empty($thatsmysession)) {} else {code}
    【解决方案2】:

    像这样检查会话

    if(session_id() == ''){ session_start();}
    

    不是这个

    if (!isset($_SESSION)) { session_start();}
    

    【讨论】:

      【解决方案3】:

      您可以先检查您的会话是否存在,以及 $_SESSION['user_session'] 是否为空。

      if(session_id() == ''){ session_start();}
      // check if you user_session exists or not, doLogin
      if(!isset($_SESSION['user_session'])){ doLogin(...); }
      

      【讨论】:

      • 这不是问题,我检查了它我可以回显会话,它给出了正确的变量,见上文我在问题所在的地方添加了一个块代码
      猜你喜欢
      • 2014-03-24
      • 2014-02-21
      • 2011-08-30
      • 2020-09-21
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多