我已经解决了我的最后一个问题,但现在又有了另一个问题。 我认为,我已经在google和stackoverflow上搜索了好几个小时了。但我无法让它发挥作用。
当我登录时,使用此:
<?php
if(isset($_POST['submit'])) {
$username = $mysqli->real_escape_string($_POST['username']);
$password = $mysqli->real_escape_string(md5($_POST['password']));
$checkUser = "SELECT * FROM users WHERE username='".$username."' AND password='".$password."'";
$checkUserResult = $mysqli->query($checkUser);
if($checkUserResult->num_rows > 0) {
$userRow = $checkUserResult->fetch_assoc($checkUserResult);
$dbid = $userRow['id'];
$dbuser = $userRow['username'];
$_SESSION['id'] = $dbid;
$_SESSION['username'] = $dbuser;
header("location: me.php");
} else {
echo "<div class='errorField'>Användarnamnet och/eller lösenordet är fel!</div>";
}
}
?>
它将我重定向到me.php,这是代码:
<?php
include "core/global.php";
echo (headers_sent())?'sent':'not sent';
session_start();
$id = $_SESSION['id'];
$username = $_SESSION['username'];
if(!isset($_SESSION['id'])) { header("location: index.php"); } ?>
然后它将我重定向回Index.php(会话原因)并且如果我尝试使用
echo (headers_sent())?'sent':'not sent';
它说“没有发送”
会话不起作用......出于某些原因我不知道。 我的朋友,是一个OOP“专业人士”甚至无法解决这个问题......所以,请帮助我!
感谢。
PS。登录页面上的session_start()位于页面顶部: 的 http://prntscr.com/1g7ohh
答案 0 :(得分:2)
me.php中的这一行...
echo (headers_sent())?'sent':'not sent';
正在破坏你的session_start电话。
通过输出文本,您将强制发送标题。
替换为
if (headers_sent()) die ("Headers have already been sent");
这样,您在测试时不会发送标头以查看标头是否已发送:)
答案 1 :(得分:0)
在您的登录示例中,您似乎没有开始会话。
将session_start();
添加到文件顶部,除非您没有向我们展示其余代码。请记住,如果您想使用它,您始终需要启动会话。