了解更多详细信息。。
我正在创建一个经过一系列页面的网站,每个后续页面都使用之前页面发布的信息设置不同的$_SESSION
变量。第一个页面之后的每个页面都设置了不同的$_SESSION变量,该变量用于查询数据库以了解要呈现的信息。然后,在大约3页之后,所有这些不同的$_SESSION变量一起用于查询数据库,以获得匹配的记录。
我的问题是,在接下来的每一页上,$_SESSION变量都会被设置得非常好,但当我进入下一页时,以前的那个$_SESSI翁变量现在会被设置为null。。
真正让我困惑的是,这种情况只发生在我使用的托管服务器上。该站点在本地主机上按预期工作(如果重要的话,我使用wampserver),并且两者上的代码完全相同。
第1页
这是在页面的顶部。我把"unset()"放在那里,以清空网站开头的数据。
<?php
session_start();
unset($_SESSION['brand']);
unset($_SESSION['model']);
unset($_SESSION['carrier']);
unset($_SESSION['size']);
?>
帖子在页面中间附近
<div id="select">
<a href="models/page2.php?brand=a" onclick="post"><img src="images/a.png" id="a"/></a>
<a href="models/page2.php?brand=b" onclick="post"><img src="images/b.png" id="b"/></a>
</div>
第2页
这是页面的顶部
<?php
session_start();
if(isset($_SESSION['brand']))
{
$brand = $_SESSION['brand'];
}
else
{
$_SESSION['brand'] = $_GET['brand'];
$brand = $_SESSION['brand'];
}
include('../connection/localconnection.php');
$query = "SELECT DISTINCT Model FROM models WHERE brand = '$brand'";
$result = $dbc->query($query);
if(!$result){
echo "DB error. Could not query database'n";
echo 'MySQL error: ' . mysql_error();
exit;
}
?>
这篇文章在页面中间。我还echo $_SESSION['brand']
以确保它仍然设置好。
<form action="../options/page3.php" method="post">
<?php
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result))
{
echo "<input type='"submit'" id='"c'" name='"model'" value='"{$row['Model']}'"/>";
}
} else {
echo "Query didn't return any result";
}
echo $_SESSION['brand'];
?>
</form>
这在服务器上运行得很好,我会看到$_SESSION['brand']设置得和它应该设置的一样
然而,在page3.php
的底部,我又是echo $_SESSION['brand']
,它被设置为null,所以我知道$_SESSION
变量仍然存在,它只是空的,对吗?
这种情况发生在每一页上,我不明白为什么。我不是php方面最棒的,但我理解相当多,并且完全不明白为什么这只会发生在我的托管服务器上,而不是我的本地主机上。如有任何帮助,我们将不胜感激。
只是个建议。根据MVC模式,会话应该在Controller中处理。您在View中处理它,并且您的View包含太多的PHP代码。
您的页面可能会出现会话问题,因为您在浏览器中打开的URL不是唯一的。例如,假设您正在为您的网站创建登录页面,并且您已成功创建会话。现在,如果您从URL登录,请说http://example.com则您的会话仅限于此URL。如果你再次打开上面的URLhttp://www.example.com(注意两个URL中的www.),然后你会看到你没有登录。所以请确保你的网页总是以单一类型的URL打开。尽管两个URL都将重定向到同一目的地,但请使用带有www.或不带有www.的URL。还请确保包含
<?php
session_start();
?>
作为每个php页面中的第一条语句。欲了解更多信息,请查看此帖子