簡體   English   中英

會話變量未設置

[英]Session variable not staying set

警告:不是重復的,我找不到此問題。

我正在本地主機上測試和構建我的網站。 我的登錄頁面上有以下代碼,如果用戶具有用戶ID cookie,並且用戶的IP與cookie所顯示的IP地址相同,則將用戶發送到其個人資料頁面。

if($_COOKIE["IPcookie"] == $_SERVER['REMOTE_ADDR']) {
    $cookieresult = mysqli_query($connection, 'SELECT COUNT(`ID`) AS count FROM users WHERE username="$_COOKIE["usercookie"]" AND `active`="1"');
    if($cookieresult == 0) {
        $loginquery = mysqli_query($connection, "SELECT * FROM users WHERE username=" .$_COOKIE['usercookie']);
        $row5 = mysqli_fetch_assoc($loginquery);
        $dbIDlogin = $row5['ID']; 
        $_SESSION['userID'] = $dbIDlogin;
        header('Location: /userprofile.php');
    }

但是,當我使用這些cookie進入用戶個人資料時, $_SESSION['userID']有時為NULL 我似乎無法弄清楚為什么有時$_SESSION變為NULL 我似乎找不到任何圖案。 我登錄一個用戶,單擊他們的個人資料頁面上所有指向網站不同區域的鏈接,然后返回到loginuser.php (上面顯示的文件),它loginuser.php一個用戶有效,而對另一個用戶無效。 這似乎是完全隨機的,這使我感到困惑。 我想不出它會在用戶之間發生變化的任何原因。 我將繼續進行測試,看看是否可以找到一種模式,但是已經投入了幾個小時,它似乎完全是隨機的。

這些問題似乎都無法解決我的問題:

在localhost上使用WAMPserver 2.0進行頁面加載之間的PHP SESSION數據丟失 -我檢查了php.ini,它具有這些代碼行(盡管是一個不同但功能正常的tmp文件)。 所選答案中測試$ _SESSION變量的示例代碼的工作原理像一個超級按鈕。 我的代碼不是。

PHP會話未保存我的session_save_path()可寫。

頁面之間未保存PHP會話PHP會話未保存 數據我在localhost而不是服務器上。

session_start(); 在每個頁面上,不包括僅在具有session_start();頁面中引用的模板session_start(); 在開始時(因為如果session_start();在模板中,則它會提示有關如何啟動會話的錯誤)。

更新:我可能有一個模式。 用戶名包括字母的用戶不會保存其信息。 所有這些用戶還具有更長的用戶名,因為他們的用戶名是“ dummy”和“ eport”之類的單詞,而不是“ 1”和“ 9”。 它適用於1和9,但不適用於虛擬人和eport。 現在,這沒有任何意義,因為它們都是由始終為數字的ID標識的,但這似乎是一種模式。

更新(來自userprofile.php的相關代碼):

<?php

$userID = $_SESSION['userID'];
var_dump($_SESSION['userID']);


//get.
$totalquery = mysqli_query($connection, "SELECT * FROM users WHERE ID='$userID'");
$arrayquery = mysqli_fetch_assoc($totalquery);
$username = $arrayquery['username'];

//Firstname
$firstname = $arrayquery['firstname'];
echo 'Welcome ' .  $firstname;
//Lastname

?>

這段代碼基本上不執行任何操作:

$cookieresult = mysqli_query($connection, 'SELECT COUNT(`ID`) AS count FROM users WHERE username="$_COOKIE["usercookie"]" AND `active`="1"');

由於$ cookieresult恰好在查詢實際失敗時大致等於0 (實際上為false )。 我猜測您真正需要做的是從結果資源句柄中實際讀取數據,該結果資源句柄已設置為$cookieresult以確定您的count(ID)值。

這是代碼的答案,如果將來有人需要或有興趣的話。 我不確定所有代碼在原始代碼中的作用,回想起來,我可能應該研究更多的SQL語法。 謝謝您的幫助,邁克。

if(isset($_COOKIE["usercookie"])) {
    if(isset($_COOKIE["IPcookie"])) {
        echo('Cookie detected, processing, wait a second.');
        if($_COOKIE["IPcookie"] == $_SERVER['REMOTE_ADDR']) {
            $cookieusername = $_COOKIE["usercookie"];
            $cookieresult = mysqli_query($connection, "SELECT * FROM users WHERE username='$cookieusername' AND active=1");

            if(!$cookieresult or mysqli_num_rows($cookieresult) == 0) {
                echo('We really don\'t believe your cookie is real, sorry.');           
            }
            else {
                $loginquery = mysqli_query($connection, "SELECT * FROM users WHERE username='$cookieusername'");
                $row5 = mysqli_fetch_assoc($loginquery);
                $dbIDlogin = $row5['ID']; 
                $_SESSION['userID'] = $dbIDlogin;
                session_write_close();
                header('Location: /userprofile.php');
            }   
        }   
        else {
            echo('We don\'t currently believe your cookie is real, sorry.');

        }
    }
    else {
        echo('We don\'t believe your cookie is real, sorry.');

    }
}

檢查是否輸入if語句。 如果不是,請檢查php.ini中的“ output_buffering”是否設置為“ ON”

暫無
暫無

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

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