簡體   English   中英

PHP會話變量丟失,會話ID在每個請求上都在變化

[英]PHP Session Variable get lost and session id is changing on every request

我找到了有關該問題的許多答案,但沒有任何解決方案能夠解決我的問題-因此,我想向您展示我的代碼,並希望有人能找到錯誤。

我有一個標准的HTML公式編寫器,它使用POST將一些數據提供給下一個.php文件,並在其中保存並將其保存到會話變量中。 我使用有關2個原因的會話變量:

  1. 如果有人重新加載頁面,它應該顯示與以前相同的信息。
  2. 我需要即將發布的php文件中的變量。

這是代碼:

session_start();

  // Handle Variables on post and reloaded-page
  if(isset($_POST["locId"]) && isset($_POST["dateId"]) )
  {

      $locId  = htmlspecialchars($_POST["locId"]);
      $dateId = htmlspecialchars($_POST["dateId"]);

      $_SESSION["locId"]    =   $locId;
      $_SESSION["dateId"]   =   $dateId;

      echo "Session variables are set: locId = " . $_SESSION["locId"] . " dateId = " . $_SESSION["dateId"];

  } elseif(isset($_SESSION["locId"]) && isset($_SESSION["dateId"])) {

      echo "get it from session";
      $locId    =   $_SESSION["locId"];
      $dateId   =   $_SESSIOn["dateId"];

   } else {

      $load_error = 1;
      $status = "alert alert-danger";
      $message = "shit, no variables here";

  }

第一個調用工作正常-設置了會話變量,並且回顯給出了正確的值。 重新加載頁面后,我得到回顯“從會話獲取”,但是我的變量沒有值。

我還檢查了我的session_id()在第一次調用和重新加載..他們是不一樣的。

我測試一個簡單的test.php文件,在其中我開始一個帶有變量的會話,並在下一個文件中詢問該變量。 它工作正常:-/

這只是我上面的代碼的問題。 我認為我的網絡服務器處理正確。 但是,導致會話ID丟失並丟失會話變量值的原因是什么?

該死的! 寫正確就是一切...

我發現了我的錯誤。

看我問題中的代碼。 第二個會話變量是$ _SESSIOn [“ dateId”] .. n是小寫! 如果我正確編寫並完成大寫,則可以正常工作。

而且session_id不再耗費時間了,我可以根據需要輸出session_id(),但是$ _SESSIOn中的一個錯誤改變了一切。 每次通話都有新的session_id,很奇怪。

再次學到了一些東西:-)感謝大家的回答和您的寶貴時間! 希望以后能對您有所幫助

好吧,您的錯誤很容易發現。 實際上,您的代碼可以完美運行。 但是請看這部分:

  echo "get it from session";
  $locId    =   $_SESSION["locId"];
  $dateId   =   $_SESSIOn["dateId"];

好的,您將會話值分配給了兩個變量,但是實際上,您只是錯過了將它們輸出到任何地方的情況。 這就是為什么您獲得“從會話中獲取”但為什么什么也不顯示的原因,因此您需要echo它們。

只需添加echo ,它將完美顯示您的var :)

echo "get it from session";
$locId    =   $_SESSION["locId"];
$dateId   =   $_SESSIOn["dateId"];

echo $locId;
echo $dateId;

嘗試這個:

SESSION_ID();

在session_start();

暫無
暫無

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

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