PHP网页未设置SESSION cookie


PHP web page does not set SESSION cookie

我创建了一个名为The Recipe Center的本地主机网站。在这个网站上,你可以发布食谱并对食谱发表评论。为了发布配方或评论,你必须登录。这是验证登录名称的php文件的代码,或者更确切地说,设置会话cookie:

<?php
$con = mysql_connect("localhost", "test", "test") or die('Could not connect to server');
mysql_select_db("recipe", $con) or die('Could not connect to database');
$userid = $_POST['userid'];
$password = $_POST['password'];
$query = "SELECT userid from users where userid = '$userid' and password = PASSWORD('$password')";
$result = mysql_query($query);
if (mysql_num_rows($result) == 0)
{
echo "<h2>Sorry, your user account was not validated.</h2><br>'n";
echo "<a href='"index.php?content=login'">Try again</a><br>'n";
echo "<a href='"index.php'">Return to Home</a>'n";
} else
{   
$_SESSION['valid_recipe_user'] = $userid;
echo "<h2>Your user account has been validated, you can now post recipes and comments</h2><br>'n";
echo "<a href='"index.php'">Return to Home</a>'n";
}
?>

每当我登录网站时,它都会说"你的用户帐户已经验证,你现在可以发布食谱和评论了。"然而,每当我导航到另一个页面并试图发布食谱或评论时,它会说我没有登录。这是发布食谱的php文件的代码:

<?php
if(!isset($_SESSION['valid_recipe_user'])){
echo "<h2> Sorry, you do not have permission to post recipes.</h2>'n";
echo "<a href='"index.php?content=login'">Please login to post recipes</a>'n";
}
else {
...
}
?>

有人能向我解释为什么会话cookie在登录页面中设置,但在我导航到另一个页面时消失了吗?

您必须在每个页面的顶部启动会话,否则当您导航到新页面时,会话变量将重置。将这一行放在使用$_SESSION:的任何页面的顶部

session_start();

你确定你首先得到了cookie吗?如果你在firebug或chrome中检查cookie,它应该显示phpsessionid与你在数据库中看到的相同。如果你看到了,那么你应该能够检查$_COOKIE和$_SESSION,确保他们已经登录。

否则,您需要确保在您的ini中设置了使用cookie。