У меня возникли проблемы с проверкой сеанса, чтобы получить доступ к странице, на которой мне нужно иметь активный сеанс.
//Connect to mysql server require "reservation/connect.php"; //Function to sanitize values received from the form. Prevents SQL injection function clean($str) { $str = @trim($str); if(get_magic_quotes_gpc()) { $str = stripslashes($str); } return mysql_real_escape_string($str); } //Sanitize the POST values $login = clean($_POST['user']); $password = clean($_POST['password']); //Create query $qry="SELECT * FROM user WHERE username='$login' AND password='$password'"; $result=mysql_query($qry); //Check whether the query was successful or not if($result) { if(mysql_num_rows($result) > 0) { //Login Successful session_regenerate_id(); $member = mysql_fetch_assoc($result); $_SESSION['SESS_MEMBER_ID'] = $member['user_id']; $_SESSION['SESS_FIRST_NAME'] = $member['position']; session_write_close(); //if ($level="admin"){ header("location: admin/dashboard.php"); exit(); }else { //Login failed header("location: index.php"); exit(); } }else { die("Query failed"); } ?>
Аутентификация:
if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) { header("location: index.php"); exit(); } ?>
Даже если я вхожу в систему из формы, страница не загружается и перенаправляет меня обратно на индекс! Что я делаю неправильно? Я поставил «require_once (« ../ auth.php »); на странице, но он все еще не работает.
Это потому, что он входит в else
часть инструкции, что означает, что $result
равен 0 или false.
Поэтому причина заключается в том, что запрос должен быть неудачным. Поэтому добавьте mysql_error()
как это.
$result=mysql_query($qry) or die(mysql_error());
Чтобы узнать точную причину ..
Это расширение ( mysql_*
) устарело от PHP 5.5.0
и будет удалено в будущем. Вместо этого следует использовать расширение MySQLi
или PDO_MySQL
. Переход на PreparedStatements
еще лучше предотвращает атаки SQL Injection!