<?php
session_name('MYSESSION');
session_set_cookie_params(0, '/~cgreenheld/');
session_start();
?>
<?php
if($_SESSION['authorisation'] == 'knownuser') {
echo '<ul class="log">';
echo '<li><h4>You are logged in "'.$_SESSION['user'].'"</h4></li>';
echo '<li><a href="logout.php">Logout</a></li>';
echo "</ul>";
} else {
echo "<h4>You are not logged in</h4>";
}
if($_SESSION['authorisation'] == 'knownuser') {
echo "<ul>";
echo "<li><h4>You are logged in and already have an account</h4></li>";
echo '<li><a href="index.php">Return Home</a></li>';
echo "</ul>";
} else {
echo "<form method='post' action='".$_SERVER['PHP_SELF']."'>";
echo '<fieldset class="login">';
echo "<h2>Login</h2>";
echo "<ul>";
echo '<li><label for="Username"> Username: </label> <input type="text" name="Username" id="Username"></li>';
echo '<li><label for="Password"> Password: </label> <input type="password" name="Password" id="Password"></li>';
echo '<li><input type="submit" value="Login"><li>';
echo "</ul>";
echo "</fieldset>";
echo "</form>";
}
if ((isset($_POST['Password'])) && $_POST['Password'] != "") {
$conn= new mysqli("localhost", "my_user", "my_password", "world"); //changed for the sake of this question
$match_Username = '%';
$match_Password ='';
if(isset($_POST['Password'])) {
$clean_Password = mysqli_real_escape_string($conn, $_POST['Password']);
$match_Password = sha1($clean_Password);
}
if (isset($_POST['Username'])) {
$clean_Username = mysqli_real_escape_string($conn, $_POST['Username']);
$match_Username = $clean_Username;
}
echo $query = "select * from User WHERE Username = '$match_Username' and Password = '$match_Password';";
$result = $conn->query($query);
if ($result->num_rows==1) {
$_SESSION['authorisation'] = 'knownuser';
$_SESSION['user'] = $_POST['Username'];
header("Location: index.php");
exit;
} else {
$_SESSION['authorisation'] = 'unknownuser';
header("Location: error.php");
exit;
}
}
两个php选项卡将在此版本中显示它们来自不同的文件。我已经让用户登录,当用户登录时,我希望它重定向到首页,我希望它显示“您已登录在此处插入用户名 .Amm I只得到一个空字符串,我不知道为什么。帮助任何人?我也知道我没有对我的输入进行santizied等等。而且我不断收到有关授权会话变量的错误 [2012年8月22日11:32:02] PHP注意:未定义索引:第23行/devel/cgreenheld/projects/Asgn1/login.php中的授权 [2012年8月22日11:32:02] PHP注意:未定义索引:第46行/devel/cgreenheld/projects/Asgn1/login.php中的授权 我不太确定那是什么意思,但如果有人能为我澄清这一点,那就太好了。
23和46出错的行是:
if($_SESSION['authorisation'] == 'knownuser') {
这段代码
答案 0 :(得分:0)
正如穆萨指出的那样,你是session_start()
任务的使命。您的通知表明authorisation
中不存在$_SESSION
密钥,这也表示未初始化的会话。
答案 1 :(得分:0)
看起来你的会话启动有问题。我会假设session_set_cookie_params(0, '/~cgreenheld/');
第二个参数有问题。您的网页必须包含类似www.example.com/~cgreenheld/的网址,其设置与您的相同。或者您可能没有包含会话开始所在的index.php。
答案 2 :(得分:0)
你的错误来自于$ _SESSION ['authorization']未设置因此不存在的事实。由于它不存在而您在第23和46行中调用它,因此您将收到这些错误。作为一个注释,可能更好的做法是在调用它们之前测试这些变量是否已设置,如果它们为空或未设置,则不会出现这些错误。
if(!empty($_SESSION['authorisation']))
所以问题是没有在login.php中设置会话变量。我相信你的问题的一部分可能来自你的sql查询后你的条件中的header()调用。在编写任何html之前需要发送标题,因此当您将表单写在顶部然后在之后发送标题时,标题将不起作用。尝试将表单的操作更改为单独的页面(例如“authenticate.php”)并将sql查询和会话设置移动到那里。不要忘记在顶部的session_start(),并确保在header()s之前没有html。
答案 3 :(得分:0)
好的,我发现了问题。我没有会话用户的isset,所以它没有检查它。当我开始检查它时,它显示了用户名。感谢大家的帮助,以及我对授权错误的帮助。