簡體   English   中英

從pthreads訪問$ _SESSION變量

[英]Accessing the $_SESSION variable from pthreads

使用PHP的pthreads庫從Thread對象調用的函數訪問會話變量時遇到問題。

主線程調用該函數時,不會發生錯誤,並且一切運行正常

但是,從Thread對象運行時,出現以下錯誤:

> PHP Notice:  Undefined variable: _SESSION
> PHP Notice:  Undefined index: Properties Manager
> PHP Fatal error:  Call to a member function getGroupValue() on a non-object

錯誤指定的行號都指向此代碼塊:

function connect_mysql_db($database, $write = false) {
    $properties = $_SESSION['Properties Manager'];

    if(!isset($database) || strlen($database)==0){
        throw new Exception("No database specified");
    }

    // Read appropriate host, port, dbname, user & pass for this database
    $host    = $properties->getGroupValue($database, DB_HOST);
    $port    = $properties->getGroupValue($database, DB_PORT);
    $db_name = $properties->getGroupValue($database, DB_NAME);
    ...Removed unnecessary code...
}

稍作搜索后,我應該可以通過放置session_start()來解決此問題 在我文件的頂部。 完成此操作后,除以下內容外,其他錯誤仍然會打印:

> PHP Notice:  A session had already been started - ignoring session_start()

所以我的主要問題是:使用pthreads訪問超全局會話時,我需要做些特別的事情嗎? 還是我在這里想念的東西完全不同?

編輯:是的,我嘗試了全局$ _SESSION; 也一樣

經過更多研究之后,似乎會話變量不是線程安全的,實際上直到會話關閉之前,它都完全鎖定。 我必須刪除對會話的引用,而只是將所需的信息傳遞給該函數或重新初始化它。

幸運的是,所創建的物業經理不會造成性能下降。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM