2011-08-09 108 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

了解,谢谢! –