我不明白为什么这些会话没有被设置。我的代码似乎与所有教程相同 - 并且堆栈溢出问题 - 但它不会设置会话。请告诉我,我是否在某处出错。设置php会话
以下是基本知识:我有一个hmtl页面,其中包含一个向数据库添加电子邮件地址和密码的表单。插入到数据库之后,我试图启动一个会话,然后将用户重定向到一个新页面并检查会话是否已设置。如果没有会话,用户将从受保护的页面重定向。
这是一个运行在数据库插入并应该设置会话的代码,但并不:
<?php
// connect to db manager
$link = mysql_connect("localhost", "root", "");
if (!$link) {die('Database Error: Could not connect: ' . mysql_error());}
// select db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
die ('Can\'t use foo : ' . mysql_error());
}
// username and password sent from form
$em = mysql_real_escape_string($_POST['email']);
$pw = mysql_real_escape_string($_POST['password']);
// MySQL Insert Statement
$insert = "INSERT INTO users (`email`, `password`) VALUES ('$em',AES_ENCRYPT('$pw','SecretKey'))";
// Perform Query
$execute = mysql_query($insert);
// if inserted, start session + variable, then redirect
if ($execute) {
session_start();
$_SESSION["signUp"];
echo '<script type="text/javascript">';
echo 'document.location.href = "../u/user.php";';
echo '</script>';
}
else{
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
mysql_close($link);
?>
这是在保护页面顶部的代码:
<?php
session_start();
if (empty($_SESSION['signUp'])){
echo "Session not set!";
// header("location:../index.php");
}
?>
我已将重定向注释掉,以便我可以测试会话是否正在设置。每次我运行表单时,我都会重定向到../u/user.php“页面,并且我收到错误消息说会话没有设置。
您无法在代码中间启动会话。你必须在页面顶部定义它。 –
这没有必要。会话必须在向客户端发送内容之前启动,但不需要在文件开始时启动它。 – Arnial
我刚刚更改了代码,会话的开始仍然在中间,代码正常工作,所以我不认为它需要位于页面的顶部。 – tdrsam