簡體   English   中英

PHP 會話變量未設置

[英]PHP Session variable not getting set

在我們網站的一頁中,我有以下代碼:

$_SESSION['returnURL'] = "/store/checkout/onepage";

再往下,這個按鈕控制:

<button type="button" title="Register Today" class="button" onclick="window.location = '/register/';" id="BecomeMember"><span><span>Become a Member Today</span></span></button>

現在,在注冊模板中,我有以下代碼:

<input type="hidden" name="returnURL" id="returnURL" value="<?php if(isset($_SESSION['returnURL'])) { echo $_SESSION['returnURL']; } else { echo '/'; } ?>" />

但它只將值顯示為 /。

是什么導致了這種情況?

第一個.php

<?php
session_start();
$_SESSION['returnURL'] = "/store/checkout/onepage";
echo '<a href="second.php">Pass session to another page</a>';
?>

第二個.php

<?php
session_start();
echo 'returnURL = ' . $_SESSION['returnURL'];
?>

所以你需要在你的兩個文件中寫session_start()

要解決此問題,您需要:

1) 確保session_start()在腳本開始時被調用,在其他任何事情之前。

2) 沒有什么可以取消$_SESSION$_SESSION['returnURL']

我能夠讓它像這樣工作

session_start();
$returnurl = "/store/checkout/onepage";
$_SESSION['returnURL'] = $returnurl;        

我最終做的是向頁面發送一個 post 變量。 ExpressionEngine 和 Magento 之間的會話差異使得這禁止使用會話變量和 cookie。

我只是資助我遇到了同樣的問題,會話在 Firefox 中運行良好,但在 chrome 中運行良好,我創建了一個測試腳本,該腳本只會創建一個會話,然后打印出 session_id() 以查看它是否被創建,運行此腳本后,我注意到 session_id() 會在每次頁面加載時更改,並且 php 會發出有關未設置日期/時間的警告。 然后我添加了

date_default_timezone_set('美國/洛杉磯');

到腳本開始時,這阻止了在每次頁面加載時生成新的 session_id() 並解決了問題。 (可能值得注意的是,我的問題似乎只出現在我的子域中,而不是頂級域中)

我正在處理的服務器已滿,因此會話無法工作,因為沒有空間存儲值。 確保您的服務器有空間。

session_start() 函數必須是文檔中的第一件事。 在任何 HTML 標簽之前。

session_start();
    <!--First Line like as-->
 <?php session_start();?>
 <!-- Now, your php or html codes-->
<html>
  <head>
   .....
   .....

我已經看到許多 CMS 和框架具有不同的處理常規會話的方式。 如果上面描述的基本兩行不起作用(因為它干擾了當前的軟件),您仍然可以使用 cookie 來實現相同的功能。 請記住,cookie 不會在關閉瀏覽器時被刪除,因此您需要明確告訴它何時釋放變量(使用 unset)。

$_COOKIE["something"] = 'value';
echo $_COOKIE["something"];
unset($_COOKIE["something"]);

暫無
暫無

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

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