簡體   English   中英

使用 XAMPP 在本地主機上設置 $_SESSION 不起作用

[英]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">';  

編輯 1:

這是我登錄的整個函數(它是課程的一部分):

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: session_start - 手冊

如果你不這樣做,那么你的會話就不會開始,除非我的第一個猜想是真的。

此外,您必須檢查本地主機上的PHP版本和php.ini 中的設置。 確保存儲會話文件的目錄是可寫的,並且會話文件確實存在。

編輯 1:

您最好使用 PHP 解決方案進行重定向:

header("Location: /");
exit();

編輯2:

PHP 具有修改 HTTP 標頭的函數。 他們中的一些:

編輯 3:

換行符和空格可能是一個問題,但也有不可見的字符序列會導致Warning: Cannot modify header information ,例如UTF-8 BOM (Byte-Order-Mark) 嘗試重新保存您的文件,確保它保存為UTF-8 (no BOM)

編輯 4:

要正確調試您的代碼,請確保 PHP 顯示所有警告和通知。 在會話開始之前運行它:

ini_set('display_errors', -1);

編輯 5:

您還必須檢查session.gc_maxlifetime設置:

session.gc_maxlifetime
session.gc_maxlifetime指定數據將被視為“垃圾”並被清理的秒數。 垃圾收集發生在會話開始期間。

編輯 6:

要在 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"
}

還要確保它顯示所有其他特殊字符以正確調試您的代碼!

編輯 7:

最后嘗試添加session_write_close(); 在重定向之前。

編輯 8:

在你的 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 檢查中:

  1. variables_order包含字母S
  2. 檢查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”

  1. 打開php.ini
  2. 將 session.auto_start 更改為"1"
  3. 如果正在運行,請"Stop" Apache
  4. Save" php.ini
  5. "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.

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