[英]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.