我有以下的代码来检查客户端是否已经在他们的浏览器的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 - 不要认为这可能是问题。
为什么需要JavaScript和使用服务器往返检测?只需在你的页面上放一个巨大的div,说:“请启用JavaScript,因为没有不显眼的javascript和优雅的降级”,然后用javascript – knittl 2011-04-17 14:58:23
隐藏该div,谢谢,这是一个好主意。但是,你能想到会话变量没有被设置的原因吗?我是否需要在我的代码中更具体(如指定名称/位置或其他)?或者我需要在服务器上配置一些东西? – RLJ 2011-04-17 15:08:46
我不知道,也许饼干没有设置或发送不错 – knittl 2011-04-17 15:27:22