Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> тут фишка с сессиями, ... код ... 
:(
    Опции темы
Onis
Дата 10.12.2005, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 18.6.2005
Где: Украина, Николаев

Репутация: нет
Всего: 3



<<код в посте ниже>>

Практиковался с сессиями, вроде написал норм код для входа в сессию уже имеющимся в БД юзера.
Тут при входе высвечивает приветствие и кнопку "выход", при нажатии на нее страница обновляется, появляется запрос на пасс и логин но приветствие и кнопка выход тоже остаются smile. Что для выхода придется два раза кликать на "выход"?

Это сообщение отредактировал(а) Onis - 10.12.2005, 14:20
PM MAIL   Вверх
-=Ustas=-
Дата 10.12.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Слушай, тут у тебя вообще бред какой-то, а не авторизация. И где у тебя стартует сессия?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Onis
Дата 10.12.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 18.6.2005
Где: Украина, Николаев

Репутация: нет
Всего: 3



-=Ustas=-

Это была ночь я бредил не то выслал.

Вот... что-то похожее на правду:

Код

<?php
session_start();
$this_file="test_session.php";
function log_in($password,$login)
{
    session_register("member");
    $member=array('login'=>$login, 'password'=>$password);
    print("open session $member[login]");
};

function check_lp($password,$login)
{
    global $log_in;
    $log_in=true;
    include("connectToDBR.inc");
    $obj=mysql_query("SELECT * FROM members ORDER BY `login` DESC");
    while($row=mysql_fetch_object($obj))
    {
        if($row->login==$login&&$row->password==$password)
        {
            print("<tr><td>Здравствуй $row->login</td></tr>");
            return true;
        }
    }
    return false;
};

function log_out()
{
    $this_file="test_session.php";
    echo("<table border='0'>
    <tr><td align='right'><form action=$this_file method='post'><input type='submit' value='выход' name='exit'></form></td></tr></table>");
    if(isset($exit))
    {
        session_destroy();
    }
};


if((!isset($login)&&!isset($password))&&(!isset($member['login'])&&!isset($member['login'])))
{
?>
    <table border='0'>
    <form action=<?php print("$this_file"); ?> method='post'>
    <tr><td>Введите логин:<input type='text' name='login'></td></tr>
    <tr><td>Введите пароль:<input type='password' name='password'></td></tr>
    <tr><td align='right'><input type='submit' value='ok.' name='ok'></form></td><td></td></tr></table>
<?php
}
else
{
    if(check_lp($password,$login))
        log_in($password,$login);
    log_out();
}


?>

Добавлено @ 14:19
Ток я в сессиях неферштэйн нечета. Чето не пашет как должно... точнее как я хотел.

Должно было: если сессии нет должно высветить форму, при вводе данных в форму проверяет наличие такого юзера в БД и если он есть создает ссесию. Которая как я понял должна сохраниться и пока не уничтожиться сессия при входе на эту страничку она будет видна, и типа юзер будет... мммм... кроче не пашет. Я ламерок

PM MAIL   Вверх
-=Ustas=-
Дата 10.12.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Это тоже бред, не лучше первого! Вот это что,
Код

$member=array('login'=>$login, 'password'=>$password);

Присваивание переменной сессии что ли? Найди два различия:
Код

$member;
$_SESSION['member'];

Массивы лучше в сессиях не хранить, лучше сделай две переменные - $_SESSION['login'] и $_SESSION['password'], хотя нафига пароль сохранять в сессии? Это небезопасно! Плюс пароль нужно хешировать - md5 или sha1.
Теперь, производить условие на наличие юзера надо в самом запросе, типа:
Код

$res = mysql_query("SELECT * FROM members WHERE login = '".$_POST['login']."' AND password = '".$_POST['password']."'");
if (mysql_num_rows($res) > 0) {
    // Есть такой юзер
} else {
    // Нет такого
}

Это будет оптимальней.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Onis
Дата 10.12.2005, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 18.6.2005
Где: Украина, Николаев

Репутация: нет
Всего: 3



-=Ustas=-
Спасибо smile


Сам себе *вот видишь что бывает если пытаешься сам разобраться в чем-то*
PM MAIL   Вверх
Onis
Дата 10.12.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 18.6.2005
Где: Украина, Николаев

Репутация: нет
Всего: 3



И еще вопрос. А что разве сессия грохается после того как вышел со странички или зашел на нее заново(не обновил)?

PM MAIL   Вверх
-=Ustas=-
Дата 10.12.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Onis @ 10.12.2005, 14:51)
А что разве сессия грохается после того как вышел со странички или зашел на нее заново(не обновил)?

Она грохается когда браузер закрывается, т.е. при закрытии и открытии вновь создается другой id-ишник сессии.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Onis
Дата 10.12.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 18.6.2005
Где: Украина, Николаев

Репутация: нет
Всего: 3



-=Ustas=-
Еще раз извини. Но не можешь объяснить как сделать чтоб сайт помнил юзера во время его хождений по сайту, и как сделать так чтоб сайт при повторном захождении на сайт юзер его помнил.

Или мож дать ссылку туда где обсуждается эта тема.

Я поиск юзал, нашел кучу топов про сессии но того что мне нужно я не нашел smile((. Видимо руки кривые до [censored 6].

Я так-же смотрел FAQ вашем форуме но там авторизация описана с помощью куки... а я их не хочу юзать smile(
PM MAIL   Вверх
-=Ustas=-
Дата 10.12.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Вот тут описано - http://forum.vingrad.ru/index.php?act=modu...el&article=2849, и ее можно перебить под сессии, ничего сложного там нет:
Цитата

Сам же скрипт, его смысл алгоритм не претерпит существенных изменений. Алгоритм его работа останется тем же, просто проверять надо буде не Куки, а сессии...



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Onis
Дата 10.12.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 18.6.2005
Где: Украина, Николаев

Репутация: нет
Всего: 3



-=Ustas=-
Вот, часть скрипта из того что приведен в той ссылке.

Код

setcookie( "time" , $tm , time() + 900 , "/" );
setcookie( "name" , $user -> name , time() + 900 , "/" );


как создать тоже самое, сессиями?

Модет так:
Код

$_SESSION["time"] =array( $tm , time() + 900 , "/" );
$_SESSION["name"] =array($user -> name , time() + 900 , "/");
???

Иль опять я брежу?

Это сообщение отредактировал(а) Onis - 10.12.2005, 17:04
PM MAIL   Вверх
-=Ustas=-
Дата 10.12.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Я не пойму, зачем ты всё время в сессии пытаешься засунуть массивы?!
Код

$_SESSION["time"] = $tm;
$_SESSION["name"] = $user->name;



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Onis
Дата 10.12.2005, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 18.6.2005
Где: Украина, Николаев

Репутация: нет
Всего: 3



Моя плакаль... переделал (вродебы) тот скрипт на сессии, но вот при регистрации там вылетают ошибки, в которые я не оч врубаюсь.... сделал всё что только смог... нечерта.... smile
может мне убить сибя?

Код

<?php
    include("connectToDBW.inc");
    function check()
    {
      $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_SESSION['name'] ) . "' LIMIT 1" );
    
      if( mysql_num_rows( $result ) == 0 )
        {  redirect( "not_auth" );  }
    
      $user = mysql_fetch_object( $result );
    
      $minutes = 15;
      $result = mysql_query( "SELECT `*` FROM `auth_sessions` WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_SESSION['time'] ) . "' AND `time` > " . ( time() - ( $minutes * 60 ) ) . " LIMIT 1 " );
      print mysql_error();
    
      if( mysql_num_rows( $result ) == 0 )
       {  redirect( "not_auth" );  }
    
      if( isset( $_GET['quit'] ) )
       {
        mysql_query( "DELETE FROM `auth_session` WHERE `id` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_SESSION['time'] ) . "'" );
    
         session_destroy();
    
        return FALSE;
       }
      else
       {
        mysql_query( "UPDATE `auth_session` SET `time` = " . time() . " WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_SESSION['time'] ) . "'" );
    
        $_SESSION["time"] = $tm;
        $_SESSION["name"] = $user->name;
    
        return TRUE;
       }
    }

    
    function auth()
    {
        $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' AND `password` = '" . md5( $_POST['pass'] ) . "' LIMIT 1" );

        if( mysql_num_rows( $result ) == 0 )
        {  redirect( "not_auth" );  }

        $user = mysql_fetch_object( $result );
    
        $tm = getmicrotime();
        mysql_query( "INSERT INTO `auth_sessions` VALUES( " . $user -> id . " , " . time() . " , '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $tm ) . "' )" );
    
        $_SESSION["time"] = $tm;
        $_SESSION["name"] = $user->name;
    
        redirect( "" );
    }

    function reg()
    {
        $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' LIMIT 1" );

        if( mysql_num_rows( $result ) == 1 )
        {  redirect( "exists" );  }

    mysql_query( "INSERT INTO `auth_members` VALUES ( '' , '" . mysql_escape_string( $_POST['name'] ) . "' , '" . md5( $_POST['pass1'] ) . "' )" );
    $_POST['pass'] = $_POST['pass1'];

    auth();
    }

    function hash( $user , $user_agent , $user_ip )
    {  
        return md5( $user ) . md5( $user_agent ) . md5( $user_ip );
    }

    function get_ip()
    {
        if ($ip = getenv("HTTP_CLIENT_IP"))
        {  return $ip;  }
    
        if ($ip = getenv("HTTP_X_FORWARDED_FOR"))
        {
            if ($ip == '' || $ip == "unknown")
            {  $ip = getenv("REMOTE_ADDR");  }
    
            return $ip;
        }
        if ( $ip = getenv("REMOTE_ADDR") )
        {  return $ip;  }
    } 
    
    function getmicrotime()
    {
        $mt = explode( " ", microtime() );
        return ( (float)$mt[0] + (float)$mt[1] );
    }
    
    function redirect( $par )
    {
        header( "Location: qwe.php?task=" . $par );
        exit;
    }
?>

<?php

if( isset($_SESSION['member']['time'] ) && isset($_SESSION['member']['name'] ) && check()==TRUE )
 {  print "Welcome.<br><a href='?quit'>Выйти</a>";  }
else
 {
  if( ! empty( $_GET['task'] ) )
   {
    switch( $_GET['task'] )
     {
      case "nepass":   print "Пароли не совпадают";
           break;
      case "not_auth": print "Логин или пароль неверный.";
           break;
      case "fields":   print "Не заполнены все поля";
           break;
      case "exists":   print "Пользователь с таким именем уже существует";
           break;
     }

    print "<br><br>";
   }

?>
    Вход: <form action='' method='POST'>
    Логин: <input type='text' name='name' maxlength='127' value=''><br>
    Пароль: <input type='text' name='pass' maxlength='127' value=''><br>
    <input type='Submit' name='blogin' value='Вход'><br>
    </form>
    Регистрация: <form action='' method='POST'>
    Логин: <input type='text' name='name' maxlength='127' value=''><br>
    Пароль: <input type='text' name='pass1' maxlength='127' value=''><br>
    Повторите пароль: <input type='text' name='pass2' maxlength='127' value=''><br>
    <input type='Submit' name='breg' value='Вход'>
    </form>
<?php
 }

?>
<?php
    if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['breg'] ) )
    {
    if( empty( $_POST['name'] ) || empty( $_POST['pass1'] ) || empty( $_POST['pass2'] ) )
    {  redirect( "fields" );  }

    if( md5( $_POST['pass1'] ) != md5( $_POST['pass2'] ) )
    {  redirect( "nepass" );  }

    reg();
    }
    
    if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) )
    {
    if( empty( $_POST['name'] ) || empty( $_POST['pass'] ) )
    {  redirect( "fields" );  }

    auth();
    }
    

    if( isset( $_SESSION['time'] ) && isset( $_SESSION['name'] ) && check() == TRUE )
    {  print "Welcome.<br><a href='?quit'>Выход.</a>";  }

    
?>


Ошибки:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\php\www\0.1_alpha\scripts\qwe.php on line 61

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\php\www\0.1_alpha\scripts\qwe.php on line 43

Warning:Cannot modify header information - headers already sent by (output started at z:\home\php\www\0.1_alpha\scripts\qwe.php:104) in z:\home\php\www\0.1_alpha\scripts\qwe.php on line 99
PM MAIL   Вверх
Mal Hack
Дата 10.12.2005, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Onis @ 10.12.2005, 20:21)
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\php\www\0.1_alpha\scripts\qwe.php on line 61

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\php\www\0.1_alpha\scripts\qwe.php on line 43

Ну а вывести mysql_error и показать саму ошибку? Мы тут не телепаты.
PM ICQ   Вверх
Onis
Дата 11.12.2005, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 18.6.2005
Где: Украина, Николаев

Репутация: нет
Всего: 3



Mal Hack
извините, или я нето делаю, или mySQL не ругается.

Да просто.... я не вижу в тех

Код

...
if( mysql_num_rows( $result ) == 0 )
...
if( mysql_num_rows( $result ) == 1 )


строках ошибок smile( smile
PM MAIL   Вверх
Mal Hack
Дата 11.12.2005, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Onis @ 11.12.2005, 21:31)
строках ошибок smile( smile

Быть не может. Раз mysql_num_rows ругается, значит запрос корявый.
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0823 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.