【发布时间】:2016-07-14 08:34:05
【问题描述】:
我不明白为什么没有设置这些会话。我的代码似乎与所有教程相同 - 以及堆栈溢出问题 - 但它不会设置会话。如果我哪里出错了,请告诉我。
以下是基础知识:我有一个 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"; 页面,并收到错误消息,指出会话未设置。
【问题讨论】:
-
您不能在代码中间开始会话。您必须在页面顶部定义它。
-
没必要。会话必须在您向客户端发送内容之前启动,但不需要在文件开头启动它。
-
我只是更改了代码,会话开始仍在中间,代码可以工作,所以我认为它也不需要在页面顶部。
-
尝试用
isset($_SESSION['signUp'])替换empty($_SESSION['signUp'])