Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сессии! Забывает сразу после авторизации.
 
 автор: OneArt   (23.07.2009 в 18:42)   письмо автору
2.6 Кб
 
 

здравствуйте!
Пишу авторизацию на сайте, но после того, как он пишет что авторизировался успешно, стоит нажать F5 и вся авторизация канет в лето, переменная $_SESSION['user'] пишет вместо значения, это - "Array".

Основная страница "закрытой" части:
<?php
session_start
();
//если только авторизируемся то вставляем 1, если уже авторизировались то 2
if($mod == "enter")
{ include 
"enter.php"; } else { include "header.php"; }
?>


Файл enter.php прикреплён в атачмент!

Файл headler.php:
<?php
$q_enter 
mysql_query("SELECT * FROM user WHERE mail='".$_SESSION['user']."' AND pass='".$_SESSION['pass']."' LIMIT 1");
if(!
$q_enter)
{ echo 
mysql_error(); die; }
if(
mysql_num_rows($q_enter)>0)
{
 
$auto true;
} else 
 {
    echo 
"<HTML><HEAD>
        <META HTTP-EQUIV='Refresh' CONTENT='5; URL=../index.php'>
        </HEAD>"
;
    echo 
'Ошибка авторизации!>';
        die;
 }
 
?>


После того, как я прощел авторизацию, меня перекидывает на простую index.php, где если перейти по ссылки типа index.php?mod=faq ИЛИ нажать F5 выскакивает ошибка авторизации и просит перезайти!

  Ответить  
 
 автор: Рома   (23.07.2009 в 20:04)   письмо автору
 
   для: OneArt   (23.07.2009 в 18:42)
 

А где у вас $_SESSION['user'] принимает какое нибудь значение?

один файл
<?php
session_start
();  // запускаем сессию
$_SESSION['user']=1;
?>


другой файл
<?php
session_start
();  // запускаем сессию
echo $_SESSION['user']; // смотрим, что было записано на предыдущей странице
?>

  Ответить  
 
 автор: OneArt   (23.07.2009 в 20:27)   письмо автору
 
   для: Рома   (23.07.2009 в 20:04)
 

В прикреплённом файле есть строчки
if(mysql_num_rows($q_enter)>0)
{
  $_SESSION['user'] = $_POST['user'];
  $_SESSION['pass'] = $_POST['pass'];


Но как только вместо enter.php прикрепляется header.php значение пропадают! Но они заданы 1 секунду назад, куда они деваются, причем девается именно $_SESSION['user'], пишет вместо значения = Array

У меня нет другого файла, всё выполняется в одном index.php, может в этом дело??

  Ответить  
 
 автор: Kaje   (23.07.2009 в 20:56)   письмо автору
 
   для: OneArt   (23.07.2009 в 20:27)
 

На остальных страницах тоже необходимо вызывать session_start(), иначе переменные $_SESSION['user'] и $_SESSION['pass'] не находятся.
<?php 
session_start
();
$q_enter mysql_query("SELECT * FROM user WHERE mail='".$_SESSION['user']."' AND pass='".$_SESSION['pass']."' LIMIT 1"); 
if(!
$q_enter
{ echo 
mysql_error(); die; } 
if(
mysql_num_rows($q_enter)>0

 
$auto true
} else  
 { 
    echo 
"<HTML><HEAD> 
        <META HTTP-EQUIV='Refresh' CONTENT='5; URL=../index.php'> 
        </HEAD>"

    echo 
'Ошибка авторизации!>'
        die; 
 } 
 
?>

  Ответить  
 
 автор: OneArt   (23.07.2009 в 21:08)   письмо автору
 
   для: Kaje   (23.07.2009 в 20:56)
 

У меня всего 1 страница index.php, и два include файла: enter.php(он прикреплён) и header.php

Первый авторизирует в самом начале и присваивает данные переменным user и pass!
Второй вызывается в любой другой случай! Причём авторизация проходит на 100% ровно, а вот header.php вызывается только 1 раз, сразу после enter.php верно, в след. раз он выдаёт, что вы не авторизированны, т.е. теряются user и pass переменные!


Грубо говоря, авторизируюсь, попадаю под своим логином на index.php жму F5 и уже не авторизирован! В этом весь трабл!=(

  Ответить  
 
 автор: Trianon   (23.07.2009 в 21:15)   письмо автору
 
   для: OneArt   (23.07.2009 в 18:42)
 

$q_enter = mysql_query("SELECT * FROM user WHERE mail='".$_SESSION['user']."' AND pass='".$_SESSION['pass']."' LIMIT 1");

Внимание.
Очередной лох пытается аутентифицировать не клиента, а сессионный механизм php.

  Ответить  
 
 автор: OneArt   (23.07.2009 в 21:38)   письмо автору
 
   для: Trianon   (23.07.2009 в 21:15)
 

>Внимание.
>Очередной лох пытается аутентифицировать не клиента, а сессионный механизм php.

Вы, товарищ, поосторожней с выражениями, тут форум, где спрашивают совет! А вот с такими выражениями да к незнакомым людям...чести вам не делает.

  Ответить  
 
 автор: Valick   (23.07.2009 в 21:46)   письмо автору
 
   для: OneArt   (23.07.2009 в 21:38)
 

Умейте извлекать нужное.
Ключевое слово очередной, задайте правильные вопросы и этот товарищ поможет Вам
кстати код Вы сами писали?

  Ответить  
 
 автор: OneArt   (23.07.2009 в 21:50)   письмо автору
 
   для: Valick   (23.07.2009 в 21:46)
 

Код в самом начале был такой, но он меня очень смущал:

mysql_query("SELECT pass='".$_POST['pass']."' FROM user WHERE mail='".$_POST['user']."' LIMIT 1");


Всё остальное взято из учебника(Самоучитель PHP 5) авторов этого сайта!
Хорошо, как тогда правильно задать запрос к базе?

Ещё подсмотрел код тут - http://www.codenet.ru/webmast/php/PHP-Sessions.php!

  Ответить  
 
 автор: Valick   (23.07.2009 в 22:28)   письмо автору
 
   для: OneArt   (23.07.2009 в 21:50)
 

несколько неудачный пример
Зачем в protected.php снова обращаться в БД непонятно ("маслянное масло" получилось) и как сказал, Трианон, идентифицировать не клиента (как в первом файле) а уже сессию.
Вот и всплыл тот лох ;)

  Ответить  
 
 автор: OneArt   (23.07.2009 в 22:35)   письмо автору
 
   для: Valick   (23.07.2009 в 22:28)
 

Вот этого я и не понял, а как эту сессию идентифицировать??? создовать отдельную таблицу с id сессиями чтоли?

  Ответить  
 
 автор: Valick   (23.07.2009 в 22:40)   письмо автору
 
   для: OneArt   (23.07.2009 в 22:35)
 

НЕТ!!!!)))
к базе вообще не нужно обращаться второй раз, и уж точно не нужна вторая таблица.
Просто проверяете установлена ли идентифицирующая переменная сессии и всё.

  Ответить  
 
 автор: OneArt   (23.07.2009 в 22:44)   письмо автору
 
   для: Valick   (23.07.2009 в 22:40)
 

типа при первом входе сделать переменную $_SESSION['in'] = true; и только её потом проверять???

  Ответить  
 
 автор: Valick   (23.07.2009 в 22:48)   письмо автору
 
   для: OneArt   (23.07.2009 в 22:44)
 

угу

  Ответить  
 
 автор: Рома   (23.07.2009 в 22:50)   письмо автору
 
   для: OneArt   (23.07.2009 в 22:44)
 

Вот почитайте сначала эту
статья
потом эти при желании
тема
тема
тема
тема

  Ответить  
 
 автор: Рома   (23.07.2009 в 22:44)   письмо автору
 
   для: OneArt   (23.07.2009 в 22:35)
 

Пользователь ввел логин и пароль, вы проверяете (логин и пароль) в базе на наличие таковых. Если такой логин в базе есть, запускаете для этого пользователя хотя бы пару сессий. На всех остальных страницах, где требуется авторизация, вы просто проверяете существование сессий через isset. Все. Для начала.

  Ответить  
 
 автор: Valick   (23.07.2009 в 22:47)   письмо автору
 
   для: Рома   (23.07.2009 в 22:44)
 

хотя бы пару сессий
это зачем?

  Ответить  
 
 автор: Рома   (23.07.2009 в 22:53)   письмо автору
 
   для: Valick   (23.07.2009 в 22:47)
 

Ну логин и какой нибудь ключ ему соответствующий. Уже пара.

  Ответить  
 
 автор: Valick   (23.07.2009 в 22:56)   письмо автору
 
   для: Рома   (23.07.2009 в 22:53)
 

ну так пару переменных сессии, а не пару сессий
разница большая

  Ответить  
 
 автор: Рома   (23.07.2009 в 23:05)   письмо автору
 
   для: Valick   (23.07.2009 в 22:56)
 

Можно поподробнее, для непросвященных, в чем эта разница?

  Ответить  
 
 автор: Trianon   (23.07.2009 в 23:14)   письмо автору
 
   для: Рома   (23.07.2009 в 23:05)
 

>Можно поподробнее, для непросвященных, в чем эта разница?

Что такое сессия?

Отдельный вопрос для Вас лично.
Если Вы считаете себя непосвященным в некоторой тематике, Вас не корежит давать советы в ней?
И если нет, то почему?

  Ответить  
 
 автор: Рома   (23.07.2009 в 23:31)   письмо автору
 
   для: Trianon   (23.07.2009 в 23:14)
 

>Что такое сессия?

Сессия это встроенный механизм для того, чтобы различать разных посетителей сайта.

>Отдельный вопрос для Вас лично.
>Если Вы считаете себя непосвященным в некоторой тематике, Вас не корежит давать советы в ней?
>И если нет, то почему?

В разговоре рождается истина. Если кто-то поправит - буду только рад узнать, что где то ошибался.

  Ответить  
 
 автор: Trianon   (23.07.2009 в 23:38)   письмо автору
 
   для: Рома   (23.07.2009 в 23:31)
 

>>Что такое сессия?
>Сессия это встроенный механизм для того, чтобы различать разных посетителей сайта.
Это сессионный механизм - это самое оно.
А сессия - это набор переменных, связанных этим механизмом с помощью идентификатора, передаваемого посредством одного из параметорв от клиента к серверу, и сохраняемых на сервере между процессами выполнения скриптов.

Но даже если сессия это механизм, то как её можно спутать с переменной?!

>
>>Отдельный вопрос для Вас лично.
>>Если Вы считаете себя непосвященным в некоторой тематике, Вас не корежит давать советы в ней?
>>И если нет, то почему?
>В разговоре рождается истина. Если кто-то поправит - буду только рад узнать, что где то ошибался.
Так может сперва родить, потом советовать как?

  Ответить  
 
 автор: Trianon   (23.07.2009 в 23:13)   письмо автору
 
   для: Рома   (23.07.2009 в 22:53)
 

Зачем ключ держать в сессии?

  Ответить  
 
 автор: Рома   (24.07.2009 в 00:28)   письмо автору
 
   для: Trianon   (23.07.2009 в 23:13)
 

да, тут я обломался.

  Ответить  
 
 автор: OneArt   (23.07.2009 в 22:48)   письмо автору
 
   для: Рома   (23.07.2009 в 22:44)
 

>>>вы просто проверяете существование сессий через isset

Что такое isset я знаю, а как вот проверить целую сессию не догадываюсь! Мы же её сначала создаём( session_start() ) а потом если проверить, то точно она будет существовать!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования