Авторизация пользователя на php/mysql/session

407
03 февраля 2017, 07:10

Делаю авторизацию, возникла такая проблема. При нажатии на <a href="logout.php"> Logout </a> , происходит редирект на login.php, т.е. на форму, но если в соседней вкладке зайти на home.php, то редирект не происходит и пользователь как бы остаётся в системе. Т.е. не происходит разрушение сессии.

Вот код php:

login.php

<?php
session_start();
if (isset($_POST['submit']))
    {     
include("config.php");

$username=$_POST['username'];
$password=$_POST['password'];
$_SESSION['login_user']=$username;
$query = mysql_query("SELECT username FROM login WHERE username='$username' and password='$password'");
 if (mysql_num_rows($query) != 0)
{
 echo "<script language='javascript' type='text/javascript'> location.href='home.php' </script>";   
  }
  else
  {
echo "<script type='text/javascript'>alert('User Name Or Password Invalid!')</script>";
}
}
?>

home.php

<html>
<head>
<title>Untitled Document</title>
</head>
<body>    
<h1>Welcome 
<?php 
session_start();
$login_session=$_SESSION['login_user'];
echo $login_session;?> </h1>
<a href="logout.php"> Logout </a>
</body>
</html>

logout.php

<?php
session_start();
if(session_destroy())
{
header("Location: login.php");
}
?>
Answer 1

Ну, я уже не помню всех тонкостей с сессиями, но в моем видении это так: при логине создаешь некий ключ в сессии, например:

//login.php
if (mysql_num_rows($query) != 0){
    $row = mysql_fetch_assoc($query)
    $user_login = $row['username'];
    $_SESSION['user_login'] = $user_login;//присваиваем нашему ключу значение
//В нашем случае, логин юзера
    if(isset($_GET['requested_url']){
        header('Location: '.urldecode($_GET['requested_url']));
    }//Если был задан запрашиваемый адрес, то автоматически перенаправляем его туда.
}

Потом, когда к тебе на страницу заходят, первым делом вызываешь скрипт, который проверяет сессию:

//somepage.php
if(!isset($_SESSION['user_login']){
    header('Location: login.php?requested_url='.urlencode($_SERVER[REQUEST_URI]));//В идеале, передавая и адрес страницы, на которую изначально хотел зайти пользователь, чтобы потом сразу перенаправить его туда.
}
require_once('content.php');
//logout.php
session_unset();
header('Location: login.php');

Сразу, просьба исключить комментарии про голый mysql вместо PDO и иже с ним, ответ ориентируется на достижение других целей.

Answer 2

Попробуй использовать unset($_SESSION['login_user']);

session_destroy() не желательно использовать

Используй проверки if(isset($_SESSION['login_user'])) ...

READ ALSO
Как добавить нули в пустые строки таблицы чтобы вывести все значения одной строкой?

Как добавить нули в пустые строки таблицы чтобы вывести все значения одной строкой?

Пробую достать данные из 2 столбца таблицы, вроде бы получается, единственное это не могу додумать как вместо пустых ячеек добавить нольИ...

319
Не отображаются изображения на localhost (React)

Не отображаются изображения на localhost (React)

Добрый день, проблема в том, что не открываются изображения, даже если оно лежит в той же папке, что и сам компонент

450
Infinite scroll на элементах

Infinite scroll на элементах

Есть страница, на которую выводятся порядка 40-50 блочных элементов при помощи append(), что делает страницу очень большойЭлементы отображаются...

411