2012-03-24 79 views
0

我有一個簡單的腳本,使用PHP會話變量設置貨幣,但只要它將用戶返回到他們在之前的目錄,會話不再設置..PHP - 通過文件夾之間的會話

(此腳本位於根文件夾的index.php)

<?php 
if (isset($_POST[product_currency])) { 
    $postCurrecy = $_POST[product_currency]; 
    session_destroy(); 
    session_start(); 
    $_SESSION[currency] = $postCurrecy; 
    echo $_SESSION[currency].' = '.$_POST[product_currency]; 
    echo "<meta http-equiv='refresh' content='1;URL=$_SERVER[HTTP_REFERER]'>"; 
    die(); 
} 
?> 

包含此它返回到是文件夾/產品/:

<?php if (empty($_SESSION[currency])) { echo 'uh oh'; } else { echo $_SESSION[currency]; } ?>Currencies:      
<form id="select-form" action="/" method="post"> 
<select class="inputbox" name="product_currency" size="1" > 
<option value="EUR" >€ Euro</option> 
<option value="USD" selected="selected">$ US Dollar</option> 
<option value="GBP" >£ GBP</option> 
</select> 
    <input class="button" type="submit" name="submit" value="Change" /> 
</form> 

$_SESSION[currency]返回「嗯哦」,因爲它是空的:(

+0

您需要在訪問會話的_all_腳本的頂部調用'session_start()'。此外,請引用您的數組鍵'$ _SESSION ['currency']' – 2012-03-24 19:29:58

+0

啊,這工作:D TY, 它總是工作正常,沒有引號,所以我不明白爲什麼我應該添加它們 – King 2012-03-24 19:33:01

+1

你應該添加它們是因爲每次你都不會拋出一堆警告,但是如果關閉了error_reporting,你就看不到它們。這是不好的做法 - 數組鍵是整數或字符串,但如果您不引用它們,PHP會將它們看作未定義的常量,並將它們轉換爲字符串。不好的做法依靠它,實際上可能導致與真正定義的常量發生碰撞。 – 2012-03-24 19:34:36

回答

0

信用爲這個答案應該去@邁克爾Berkowski

你需要在頂部調用session_start()其訪問會話的所有腳本。