[英]Setting $_SESSION doesn't work on localhost using XAMPP
我在我的 PHP 代碼中這樣設置我的會話: $_SESSION['user_id'] = $login;
這在上傳到我的服務器並跨不同頁面時似乎工作正常,但是當我在本地機器上測試網站時,會話似乎在將腳本留在設置的位置后立即取消設置。
我正在使用 XAMPP 和完全相同的代碼在我的本地機器上進行測試。
我不確定為什么會出現這個問題,非常感謝任何有用的答案。
$_SESSION['user_id'] = $login;
echo '<META HTTP-EQUIV="refresh" content="0;URL=../home.php">';
這是我登錄的整個函數(它是課程的一部分):
public function loggingIn(){
session_start();
$db = new Database('localhost','root','','userdata');
$userFunctions = new Users($db);
$username = $_POST['usernameInput'];
$password = $_POST['passwordInput'];
if(empty($username) || empty($password)){
$this->errors['u&p'] = 'Please Enter Your Username AND Password';
$this->printE();
} elseif($userFunctions->user_exists($username)===false){
$this->errors['nm'] = 'That Username/Password Combination Is Not Valid';
$this->printE();
} else {
$login = $userFunctions->login($username, $password);
if($login === false){
$this->errors['nm'] = 'That Username/Password Combination Is Not Valid';
echo 'Login Failed!';
} else {
if(!$userFunctions->economyTableExistsForUser($login)){
$userFunctions->createEconomyTableForUser($login);
}
if(!$userFunctions->schoolTableExistsForUser($login)) {
$userFunctions->createSchoolTableForUser($login);
}
$_SESSION['user_id'] = $login;
echo $_SESSION['user_id']; // working fine
header('Location: ../home.php');
}
}
}
假設您的家用機器沒有:
session.autostart = On
在您的php.ini 中,而您的另一台機器顯然是。
確保您已在 PHP 代碼中設置:
session_start();
如果你不這樣做,那么你的會話就不會開始,除非我的第一個猜想是真的。
此外,您必須檢查本地主機上的PHP版本和php.ini 中的設置。 確保存儲會話文件的目錄是可寫的,並且會話文件確實存在。
您最好使用 PHP 解決方案進行重定向:
header("Location: /");
exit();
PHP 具有修改 HTTP 標頭的函數。 他們中的一些:
換行符和空格可能是一個問題,但也有不可見的字符序列會導致Warning: Cannot modify header information
,例如UTF-8 BOM (Byte-Order-Mark) 。 嘗試重新保存您的文件,確保它保存為UTF-8 (no BOM)
。
要正確調試您的代碼,請確保 PHP 顯示所有警告和通知。 在會話開始之前運行它:
ini_set('display_errors', -1);
您還必須檢查session.gc_maxlifetime
設置:
session.gc_maxlifetime
session.gc_maxlifetime指定數據將被視為“垃圾”並被清理的秒數。 垃圾收集發生在會話開始期間。
要在 Sublime Text 中查看空格,請編輯設置:
// Set to "none" to turn off drawing white space, "selection" to draw only the
// white space within the selection, and "all" to draw all white space
"draw_white_space": "selection",
您可以在 Preferences->Settings Default 中設置它。 如果您編輯用戶設置 Preferences->Settings - User 並按以下方式添加行:
{
"font_size": 10,
"draw_white_space": "all"
}
還要確保它顯示所有其他特殊字符以正確調試您的代碼!
最后嘗試添加session_write_close();
在重定向之前。
在你的 PHP 文件中設置,在session_start();
之前session_start();
, session.save_path = "/home/username/tmp";
指示。 在public_html之外創建tmp
目錄。 確保tmp
目錄具有chmod 770並使用相同的用戶/組權限創建。 在您的主目錄中運行ls -lsa
以檢查新目錄是否與其他目錄具有相同的用戶/組,例如public_html 。 如果沒有,請確保通過運行chown username:groupname /home/username/tmp
更改tmp
的 root 權限。
對此的快速更新。 我發現此響應非常有用,但是請注意,在我安裝的 XAMPP 中,session.autostart=On 的 php.ini 條目略有不同。 我發現了以下內容:
; 在請求啟動時初始化會話。 ; http://php.net/session.auto-start session.auto_start=0
我把這個改成:
; 在請求啟動時初始化會話。 ; http://php.net/session.auto-start session.auto_start=1
確保在php.ini
( xamp\\php\\php.ini
) 中啟用了會話 cookie。
session.use_cookies=1
在您的 php.ini 檢查中:
variables_order
包含字母S
session.save_path
存在並且可由運行 PHP 的用戶寫入。如果您使用嵌入在 .htm/.html 文檔中的 PHP,您需要確保 Apache 可以適當地處理它們。 這是通過編輯 httpd.conf 並添加行來完成的
AddType application/x-httpd-php .html .htm
到<IfModule mime_module>
我正在與這個問題作斗爭,但解決了......
在您的/opt/lampp/etc/php.ini
嘗試更改此行:
session.save_path = "/var/lib/php/session"
為了這:
session.save_path = "/opt/lampp/var/session"
注意:也許您需要在/opt/lampp/var
創建文件夾“session”
php.ini
"1"
"Stop"
ApacheSave"
php.ini
"Start"
阿帕奇Session Issue Fixed in Xampp 7.1.6 with following Changes in php.ini
Line #1403 set:
session.auto_start = 1
我在現場工作時遇到了類似的問題 Xampp 沒有。
在我的情況下,訣竅是禁用下面的兩行。
header('Set-Cookie: same-site-cookie=huis; SameSite=Lax');
header('Set-Cookie: cross-site-cookie=stijl; SameSite=None; Secure');
因此,檢查任何修改有關 coockies 的內容是我的建議。
請在 php ini 中檢查您的“session.cookie_path”。 默認情況下它是“session.cookie_path=/”
在 php.ini (C:\\xamp\\php\\php.ini) 中啟用會話 cookie。
改變
session.use_cookies=0
到
session.use_cookies=1
記得重啟xampp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.