2011-08-09 109 views
3

我一直在試圖弄清楚這一點,現在,它正在推動我堅果。基本上我有一個美國和加拿大用戶的表格。還有的形式爲加拿大用戶,其引導用戶可以-sesssion.php,其中包含底部的鏈接:更改SESSION變量值

<?php 
if (isset($_SESSION['can'])) { 
    session_start(); 
    session_destroy(); 
    session_unset(); 
    session_start(); 
    $_SESSION['can'] = 2; 
} 
else { 
    session_start(); 
    $_SESSION['can'] = 1; 
} 
header('Location: '. $_SERVER['HTTP_REFERER'] . ''); 
?> 

基本上,如果他們點擊鏈接,它會設置$ _SESSION [「可以」 ] = 1.現在還有另一種選擇,如果他們點擊該鏈接,它會將它們帶回到此頁面,並且會話應該被銷燬並設置一個新值(呃,這就是它應該做的)。問題是,我已經打印出$ _SESSION ['can'],並且在進入該頁面後它仍然保留了舊值。有沒有更好的方法來做到這一點,或者我的代碼有什麼問題嗎?謝謝您的幫助。

+1

你應該知道的是,'HTTP_REFERER'是不是可以依靠被設置,或被設置爲實際的頭轉介頁。它是可選的,瀏覽器可以發送任何想要的東西。 –

+0

有沒有更有用的選擇,還是更實用一些,只需在頁面中包含此php? –

+0

您可以將代碼放在任何想要更改會話變量的位置。您可以根據需要多次更改,而無需將任何人發送到新頁面。 –

回答

7

這是你寫的:

if (isset($_SESSION['can'])) { 
    session_start(); 

session_start是讀取與用戶的PHPSESSID Cookie關聯的會議文件,並填充$_SESSION的功能,所以你想從數組中讀取有任何前值。

你需要調用session_start之前,你是否$_SESSION['can']有一個值。

您也不需要銷燬並創建一個新的會話來改變一個值。

<?php 
session_start(); 
if (isset($_SESSION['can'])) { 
    $_SESSION['can'] = 2; 
} else { 
    $_SESSION['can'] = 1; 
} 
header('Location: '. $_SERVER['HTTP_REFERER'] . ''); 
?> 
+0

Gotcha。是的,我只是把這個會議作爲最後一次努力的一部分,但顯然它不會起作用,因爲我並沒有初始化會議。 –

+0

我正在顯示其他響應在我的結尾首先出現。雖然我很欣賞你的快速回復。 –

+0

以下是我的結果:25分鐘前回答 - 尼爾-----回答27分鐘前 - 丹 –

1

試試這個:(只用一個session_start()

<?php 
session_start(); 
if (isset($_SESSION['can'])) { 
    $_SESSION['can'] = 2; 
} 
else { 
    $_SESSION['can'] = 1; 
} 
header('Location: '. $_SERVER['HTTP_REFERER'] . ''); 
?> 
+0

Perfecto!任何想法爲什麼多session_start()的打破? –

+1

他們沒有,你只是在**錯誤的時間打電話給我^ _^ – Neal

+0

瞭解,謝謝! –