【发布时间】:2014-02-13 06:42:18
【问题描述】:
我正在制作一个允许用户登录的网站,所以当我登录时它会登录,但是如果我刷新页面,会话就会结束?我知道它不应该这样做。基本上我的问题是我的页面在刷新页面时破坏了会话。 任何帮助将不胜感激!
这是我的主要登录代码:
if(isset($_POST['username'])&&isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$password_hash = md5($password);
if (!empty($username)&&!empty($password)) {
$query = "SELECT * FROM employees WHERE username = '$username' AND password = '$password_hash'";
$query_run = mysql_query($query);
$mysql_num_rows = mysql_num_rows($query_run);
if ($mysql_num_rows == 0) {
echo 'Unable to log in, username and/or password does not match!'.'<br><br>';
echo '<a href = "#">Try Again!</a>';
} else if ($mysql_num_rows == 1) {
$user_id = mysql_result($query_run, 0, 'id');
$first_name = mysql_result($query_run, 0, 'firstname');
$last_name = mysql_result($query_run, 0, 'lastname');
$user_name = mysql_result($query_run, 0, 'username');
$pass_word = mysql_result($query_run, 0, 'password');
$email = mysql_result($query_run, 0, 'email');
$grade = mysql_result($query_run, 0, 'Security Clearance');
$_SESSION['user_id']=$user_name;
}
}
}
这是我的 core.php
ob_start();
session_start();
function loggedin() {
if(isset($_SESSION['user_id'])&&!empty($_SESSION['user_id'])) {
return true;
} else {
return false;
}
}
这是我的索引页面(用户登录时看到的页面)
require 'core.php';
require 'connect.inc.php';
// The page to connect to my MySQL db
include 'main_login.inc.php';
if (loggedin()) {
// if logged in : do stuff
}
} else {
// if its not logged in : redirect
// If User Is Not Logged: Redirect To Jamie Co Home
header('Location: #');
}
【问题讨论】:
-
您的所有文件中都包含
session_start();吗? -
旁注:您正在使用已弃用的
mysql_*函数以及使用md5进行密码存储。强烈建议不要同时使用这两种方法,渲染您的代码Open to SQL injection -
这行也让我挑眉
WHERE username = '$username' OR email = '$username'为什么有两个$username实例?您可能打算使用WHERE username = '$username' OR email = '$email',这似乎是最可能的原因,或者部分原因。 -
他似乎想使用用户名或电子邮件作为用户名登录
-
我知道这一点,但这行没有意义
WHERE username = '$username' OR email = '$username'因为有一个名为$email@milo5b 的变量 --- 我非常怀疑用户名和电子邮件是两列都一样。
标签: php session authentication login web