[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Заходит в админку без сессии
kolyabis
Добрый день всем. Полазил по этому разделу, и не нашел ответа на свой вопрос.

Продлема состоит вот в чем.

Есть у меня 2-а файла.
1-й ( index.php ) - в этом файле у меня отрисована форма, в которую я вношу логин и пароль, и если они правельные то открывается сессия и я могу перейти на другой файл index_cp.php и дальше работать с админ-панелью.

2-й файл ( index_cp.php ) В этом файле я на ООП сделал админку.

Проблемка заключается в том, что когда у меня создается сессия я спокойно захожу в админку и правлю там все что надо. Но потом когда я нажимаю на выход, у меня сесия удаляется, но если я просто впишу адрес той страницы на которой я был до выхода с админки, меня снова запускает в админку, но уже без сессии. Хотя я делал проверку что если сессия пустая, то делал редирект на страничку index.php

Подскажите пожалуйста из-за чего такое может происходить.

Я даже пытался средствами javascript делать редирект если сессия пустая. Но результат остался прежним.


Вот код файла index.php

<?php
require($_SERVER['DOCUMENT_ROOT'].'/administrator/init.php');
if ($_GET['logout'] == 1){
unset($_SESSION['login']);
header('Location: index.php');
}else if($_SESSION['login'] == ""){
header('Location: index.php');
}
if (isset($_SESSION['login'])){
header('Location: index_cp.php?link=1');
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>
<
head>
<
link rel="stylesheet" href="css/templates.css" type="text/css" />
<
title>Вход в админ-панель</title>
</
head>
<
body>
<
center>
<
div align="center" class="pages_content" style="margin:10px; padding:8px; background:#f0efef; max-width:200px; border: 1px double #333;">
<
form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<
p>
<
label>ЛОГИН:</label>
<
input name="login" type="text" size="15" maxlength="15" value="<?php echo $_COOKIE["login"]; ?>" >
</
p>
<
p>
<
label>ПАРОЛЬ:</label>
<
input name="password" type="password" size="15" maxlength="15" value="<?php echo $_COOKIE["password"]; ?>">
</
p>
<
input type="submit" name="submit" value="Войти">
</
form>
</
div>
</
center>
<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){
//заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST['login'])) {
$login = $_POST['login'];
if ($login == '') {
unset($login);
}
}

//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
if (isset($_POST['password'])) {
$password = $_POST['password'];
if ($password == '') {
unset($password);
}
}



//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
//удаляем лишние пробелы при помощи функции ( trim )
$login = trim($login);
$password = trim($password);


$conn = new login($login, $password);
$conn->wevLogin();

}
?>
</body>


Вот код файла index_cp.php

<?php
require($_SERVER['DOCUMENT_ROOT'].'/administrator/init.php');
require($_SERVER['DOCUMENT_ROOT'].'/administrator/domen.js');
if (!isset($_SESSION['login'])){
echo "<script type='text/javascript'>
function getRedirect(){
window.location = 'http://' + domen + '/administrator/index.php';
}
window.onload = function(){
setTimeout('getRedirect()', 1000);
}
</script>"
;
}else if($_SESSION['login'] == ""){
echo "<script type='text/javascript'>
function getRedirect(){
window.location = 'http://' + domen + '/administrator/index.php';
}
window.onload = function(){
setTimeout('getRedirect()', 1000);
}
</script>"
;
//header('Location: index.php');
}
?>
<head>
<
link rel="stylesheet" href="css/templates.css" type="text/css" />
<
script type="text/javascript" src="ckeditor/ckeditor.js"></script>
<
script type="text/javascript" src="js/clock.js"></script>
</
head>
<
body onLoad="startTime()" bgcolor="#f7f7f7">

<
table width="90%" border="0" align="center" >
<
tr>
<
td>
<
div class="top-line" align="right">
<
div id="time" class="time" align="center"></div>
</
div>
</
td>
<
td rowspan="2" align="center">
<?php
echo "<div class='menu' style='padding:10px; height:0px; width:0px;'>";
echo "<center><a href='./index.php?logout=1'><font color=red>Виход</font></a></center>";
echo "</div>";
?> </td>
</
tr>
<
tr>
<
td style="border-bottom:2px solid #999999; ">
<?php
$menu = new Menu_admin();
$menu->MenuLink();
?>
</td>
</
tr>
<
tr>
<
td width="91%">
<?php
$menu->MenuWev();
?>
</td>
<
td width="9%" rowspan="2">
</
td>
</
tr>
<
tr>
<
td>
<?php
//Подключение к классу articles, изменение и удаление статей
$articles = new while_Articles();
$articles->wevArticles_edit();
$articles->wevArticles_del();
?>
<?php

//Подключение к mod_menu
$menu_admin = new adminMenu();
//$menu_add = new adminMenuAdd();

?>
<?php

//Тут отрисовывается обьект сортировки меню, если мы конечно редактируем порядок показа. Если нет, то он нигде не отобразится.
$listEdit = new listEdit();
$listEdit->editList();
?>
</td>
</
tr>
</
table>
</
body>

Вот код класса который запускает сессию login.class.php

<?php
require($_SERVER['DOCUMENT_ROOT'].'/administrator/init.php');
class login {

protected $login;
protected $pass;


//////////////////// Создал конструктор и наследование конструктора от класса Conn и передал в него еще 2-е переменные /////////////////////////
public function __construct($l,$p){


//Обрабатываем свойство - (переменная) $l

try{
if(empty($l)) throw new Exception ("<center><div class='pages_content' style='background-color:#DBDBDB; width:600px;' align='center'><font color=red><h2>Логин небыл введен</h2></font></div></center>");
}catch(Exception $login){
echo $login->getMessage();
return '';
}

/////////////////////////////////////////

//Обрабатываем свойство - (переменная) $p

try{
if(empty($p)) throw new Exception ("<center><div class='pages_content' style='background-color:#DBDBDB; width:600px;' align='center'><font color=red><h2>Пароль небыл введен</h2></font></div></center>");
}catch(Exception $pass){
echo $pass->getMessage();
return '';
}

/////////////////////////////////////////

$this->login = trim(strip_tags(stripcslashes($l)));
$this->pass = trim(strip_tags(stripcslashes($p)));
}
//////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////

//////////////////////////////////////// Данный метод обрабатывает переменные из конструктора и запускает в админ - панель ///////////////////////

public function wevLogin(){

global $db_conn;

$sql = "SELECT `login`, `pass` FROM `user`";
if($result = $db_conn->query($sql)){
$row = $result->fetch_array();
if($this->login == $row['login'] and $this->pass == $row['pass']){
echo "<center>";
echo "<div class='pages_content' style='background-color:#DBDBDB; width:600px;'>";
$_SESSION['login'] = $this->login;
//$_SESSION['pass'] = $this->pass;
echo "<br /><br /><center><font color=blue><h2>Логин и пароль проверенны, вы можете перейти в панель администрирования <br> <a href='index_cp.php?link=".intval(1)."'> Перейти в панель редагування</a></h2></font></center><br /><br />";
echo "</div>";
echo "</center>";
}else{
echo "<center>";
echo "<div class='pages_content' style='background-color:#DBDBDB; width:600px;'>";
echo "<br /><br /><center><font color=blue><h2>Логин и пароль не верные. Проверте правильность вводимых данных</a></h2></font></center><br /><br />";
echo "</div>";
echo "</center>";
}
}

$result->close();
}

}

?>





Спустя 6 минут, 43 секунды (8.06.2012 - 12:55) Игорь_Vasinsky написал(а):
Цитата
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">


и

Цитата
if ($_SERVER['REQUEST_METHOD']=="POST"){


что должно произойти, если ты так сомневаешься? biggrin.gif


Цитата
if (!isset($_SESSION['login'])){ 
    echo "<script type='text/javascript'>
  function getRedirect(){
  window.location = 'http://' + domen + '/administrator/index.php';
    }
  window.onload = function(){
    setTimeout('getRedirect()', 1000);
  }
  </script>";


и

Цитата
}else if($_SESSION['login'] == ""){
echo "<script type='text/javascript'>
  function getRedirect(){
  window.location = 'http://' + domen + '/administrator/index.php';
    }
  window.onload = function(){
    setTimeout('getRedirect()', 1000);
  }
  </script>";
//header('Location: index.php');
}


ни чё не смущает?


Спустя 7 минут, 3 секунды (8.06.2012 - 13:02) kolyabis написал(а):
Конечно смущает, я уже переписывал этот код раз 20 и постоянно по разному.
Делал просто вот такую проверку
if (!isset($_SESSION['login'])){		
header('Location: index.php');
}

Спустя 1 минута, 16 секунд (8.06.2012 - 13:04) kolyabis написал(а):
Делал вот такую проверку.

if(empty($_SESSION['login'])){
header('Location: index.php');
}

Спустя 2 минуты, 37 секунд (8.06.2012 - 13:06) Игорь_Vasinsky написал(а):
логику приложения делай проще

пара логин и пароль совпали - создай сессионый массив, переадресуй в админку.

в админке - есть нужный элемент сессионого массива - велком, нету - гетаут куикли.

Спустя 15 минут, 56 секунд (8.06.2012 - 13:22) kolyabis написал(а):
Дело в том что у меня для админки идет проверка только по логину.
Тоесть если у меня совпала пара ( логин и пароль ) , то я открываю сессию только по логину.

А в админке я проверяю, если сессия по логину есть, то что то делать, а если сессия по логину пустая, то делать редирект.

По этому мне не надо передавать массив, так как если пусто то просто надо чтоб выплевывало обратно. А так как делал на ООП, то у меня всего одна страничка для всего сразу, тоесть если я буду переходить по всем ссылкам, то все равно этот код должен обрабатыватся, так как он будет всегда у меня на одной страничке.


Спустя 2 минуты, 46 секунд (8.06.2012 - 13:25) Игорь_Vasinsky написал(а):
да какая разница по чему проверять? biggrin.gif по логину так по логину.

1. ввод данных
2. провека на совпадение вводимых данных
да
нет
3. нет - сказал что не подходит
3. да - создал сессию и запустил в админку, где в свою очередь проверил - есть ли в сессии логин

Спустя 27 минут, 12 секунд (8.06.2012 - 13:52) kolyabis написал(а):
Сделал вот такую проверку. Отрабатывает все как надо, единственное что не делает переадрисацию.

if(isset($_SESSION['login'])){
echo "Есть сессия";
if($_SESSION['login'] == "admin" ){
echo "CОВПАДАЕТ СЕССИЯ";
}else{
echo "НЕ СОВПАДАЕТ СЕССИЯ";
}
}
else{
header('Location: index.php');
}

Спустя 3 минуты, 53 секунды (8.06.2012 - 13:56) Игорь_Vasinsky написал(а):
выше этого куска кода нет? если есть - то там не должно быть никакого вывода: echo, print, html и естественно конфликт с session_start() - выход - делать редирект на JS

Спустя 2 минуты (8.06.2012 - 13:58) kolyabis написал(а):
Выше этого куска кода, у меня только вот такие строки.

session_start();
require($_SERVER['DOCUMENT_ROOT'].'/administrator/init.php');
require($_SERVER['DOCUMENT_ROOT'].'/administrator/domen.js');

Спустя 26 минут, 54 секунды (8.06.2012 - 14:25) kolyabis написал(а):
Всем спасибо, особенно Игорь_Vasinsky

Проблемка заключалась в том что проверка стояла после подключения файла init.php

Хоть в правилах и написано что недолжно быть ни пробелов ни echo, print.
Для того чтоб код работал, оказывается что не совсем так, еще надо чтоб проверка на подобные сессии и кукисы должна быть сразу после вызова функции session_start();

Спустя 1 минута, 31 секунда (8.06.2012 - 14:27) Игорь_Vasinsky написал(а):
да, пустых строк не должно быть ранее посылаемого заголовка.

Спустя 6 минут, 23 секунды (8.06.2012 - 14:33) kolyabis написал(а):
У меня их и не было.

Вот код моего init.php


<?php session_start();
header("Content-Type: text/html; charset=cp1251");
require_once(dirname(__FILE__). '/../class/Conn.class.php');
require_once(dirname(__FILE__). '/../class/LogoHead.class.php');
require_once(dirname(__FILE__). '/../class/menu.class.php');
require_once(dirname(__FILE__). '/../class/menuContent.class.php');

Спустя 11 минут, 56 секунд (8.06.2012 - 14:45) Игорь_Vasinsky написал(а):
а в них?
Цитата
require_once(dirname(__FILE__). '/../class/Conn.class.php');
require_once(dirname(__FILE__). '/../class/LogoHead.class.php');
require_once(dirname(__FILE__). '/../class/menu.class.php');
require_once(dirname(__FILE__). '/../class/menuContent.class.php');

Спустя 7 минут, 55 секунд (8.06.2012 - 14:53) kolyabis написал(а):
Тоже нет. Я классы писал таким образом чтоб в них вообще не было echo или print я return везде использовал чтоб возвращать данные, а потом другими внутренними классами их обрабатываю. Вот по этому то я и удивился так. Потому что вообще выводов небыло.

Спустя 2 минуты, 59 секунд (8.06.2012 - 14:56) Игорь_Vasinsky написал(а):
классы и функции тут не страшны)) они вызываются и в другом месте как правило и имеют свою локальную область видимости, т.е. что внутри них - не видно снаружи.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.