2011-04-17 33 views
0

我有以下的代码来检查客户端是否已经在他们的浏览器的JavaScript:Session变量被我的电脑,但没有虚拟主机提供商的服务器上设置

page.php文件:

<?php 
session_start(); 
if(isset($_SESSION['gocheck'])) {$gocheck = $_SESSION['gocheck'];} 
else {$gocheck = 'no';} 
//echo $gocheck; 
if($gocheck=='no'){header ("Location: ./gocheck.php"); exit;} 
//Only reaches this line if gocheck.php has been run and Javascript is enabled. 
unset($_SESSION['gocheck']); 
//rest of page 
?> 

gocheck.php :

<?php 
session_start(); 
$_SESSION['gocheck'] = 'yes'; 

echo" 
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd\"> 
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\"> 
<head> 
<script type=\"text/javascript\" language=\"JavaScript\"> 
window.location.replace('page.php'); 
</script> 
</head> 

<body> 
This website requires Javascript to be enabled in your browser. <br /> 
Please enable Javascript and try again. 
</body> 

</html> 

"; 

?> 

因此,什么应该发生的是用户总是从page.php文件重定向到gocheck.php,其设置会话变量$ gocheck为“yes”和引导回通过Javascript来page.php文件。因为$ gocheck然后等于'是',page.php不应该直接返回tio gocheck.php。

这工作得很好我的电脑(使用WAMP),但是当我上传文件到网络主机,它似乎卡在page.php和gocheck.php之间的无限重定向循环。另外,如果我在page.php中回显$ gocheck,它会返回'no',所以看起来好像因为某种原因会话变量$ gocheck没有被gocheck.php正确设置。

请问有人可以点亮一下吗?我的代码中有错误吗?有什么我需要更改在webhost的服务器上的php.ini?

谢谢!

P.S.我的电脑上的WAMP使用PHP v.5.3.0,但虚拟主机使用PHP v.5.2.12 - 不要认为这可能是问题。

+0

为什么需要JavaScript和使用服务器往返检测?只需在你的页面上放一个巨大的div,说:“请启用JavaScript,因为没有不显眼的javascript和优雅的降级”,然后用javascript – knittl 2011-04-17 14:58:23

+0

隐藏该div,谢谢,这是一个好主意。但是,你能想到会话变量没有被设置的原因吗?我是否需要在我的代码中更具体(如指定名称/位置或其他)?或者我需要在服务器上配置一些东西? – RLJ 2011-04-17 15:08:46

+0

我不知道,也许饼干没有设置或发送不错 – knittl 2011-04-17 15:27:22

回答

2

为什么用php来检测javascript是否启用?你可以只添加以下HTML标记到您的网页:

<noscript> 
Pleas enable javascript! 
</noscript> 

然后,如果用户启用JavaScript和刷新页面的JavaScript代码将工作。

0

OK没关系,现在所有的会话变量被设置正确,也许这只是一个正确的等待一点,直到虚拟主机提供商配置的一切问题(也有这个问题,设置电子邮件)

相关问题