PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 9
smittt Отправлено: 18 Октября, 2013 - 21:43:03 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4329
В общем так и не разобрался с тем скриптом, понятия не имею, что там было не так. С сессиями все было и есть нормально. Что то не так было в коде, что не знаю. Переписал код на вот такое :
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function logout() {
  4.     session_unset();
  5.     header("Location: http://" . $_SERVER['HTTP_HOST'] . "/pass/");
  6.     return true;
  7. }
  8.  
  9. function showLoginForm() {
  10. ?>
  11. <link rel="stylesheet" type="text/css" href="style.css" />
  12. <div class="add" align="center">
  13.     <form method="post">
  14.         <table>
  15.             <tr>
  16.                 <td>Login:</td><td><input type="text" name="login" /></td>
  17.             </tr>
  18.             <tr>
  19.                 <td>Passwd:</td><td><input type="password" name="passwd" /></td>
  20.             </tr>
  21.             <tr>
  22.                 <td colspan="2"><input type="submit" value="Login" /></td>
  23.             </tr>
  24.         </table>
  25.     </form>
  26. </div>
  27. <?PHP
  28. }
  29.  
  30. if (isset($_POST['login']) && isset($_POST['passwd'])) {
  31.     include("#mysql.inc");
  32.     $login = mysql_real_escape_string($_POST['login']);
  33.     $passwd = mysql_real_escape_string($_POST['passwd']);
  34.     $q = "SELECT * FROM `users` WHERE `login`='{$login}' AND `passwd`='{$passwd}' LIMIT 1";
  35.     $res = mysql_query($q) or trigger_error(mysql_error() . $q);
  36.     if (mysql_num_rows($res) > 0) {
  37.         $row = mysql_fetch_assoc($res);
  38.         $_SESSION['id'] = $row['uid'];
  39.         $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  40.         header("Location: http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
  41.     }else{
  42.         die("incorrect login info");
  43.     }
  44. }
  45. if (isset($_GET['action']) && ($_GET['action'] == 'logout'))
  46.     logout();
  47. if (!isset($_SESSION['id']) OR $_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
  48.     showLoginForm();
  49.     exit;
  50. }
  51. ?>
smittt Отправлено: 15 Октября, 2013 - 14:36:07 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4329
перехватил темпером сессию
CODE (htmlphp):
скопировать код в буфер обмена
  1. PHPSESSID=pseim09246uc2vak86qn6d2ad7; path=/
  2.  
  3. root@debian-min:/var/www/ххххх/data/mod-tmp# ls -la | grep pseim09246uc2vak86qn6d2ad7
  4. -rw------- 1 www-data hms    88 Oct 15 15:34 sess_pseim09246uc2vak86qn6d2ad7
  5. root@debian-min:/var/www/ххххх/data/mod-tmp#
  6.  

(Добавление)
Весь error.log за сегодня
но эта ошибка была и вчера и позавчера и еще ранее, не думаю, что она имеет отношение к этим скриптам

CODE (htmlphp):
скопировать код в буфер обмена
  1. [Tue Oct 15 00:41:23 2013] [error] [client 127.0.0.1] (13)Permission denied: cannot read directory for multi: /var/www/
  2. [Tue Oct 15 00:41:24 2013] [error] [client 127.0.0.1] (13)Permission denied: cannot read directory for multi: /var/www/
  3. [Tue Oct 15 00:41:26 2013] [error] [client 127.0.0.1] (13)Permission denied: cannot read directory for multi: /var/www/
  4. [Tue Oct 15 12:28:23 2013] [error] [client 127.0.0.1] (13)Permission denied: cannot read directory for multi: /var/www/
  5. [Tue Oct 15 12:39:19 2013] [error] [client 127.0.0.1] (13)Permission denied: cannot read directory for multi: /var/www/
  6. [Tue Oct 15 13:43:48 2013] [error] [client 127.0.0.1] (13)Permission denied: cannot read directory for multi: /var/www/
smittt Отправлено: 15 Октября, 2013 - 14:22:04 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4329
Ошибки да, могут не работать(
Это мой действующий и рабочий сервер, не хотелось бы на нем устраивать даже временные тесты.
Я залил туда, что бы хоть как то было наглядно видно, что я делаю..
На счет utf-8, да, я в курсе, спасибо! Это просто я на скорую состряпал табличку.
(Добавление)
CODE (htmlphp):
скопировать код в буфер обмена
  1. Resource id #4Array ( [id] => 1 [login] => admin [passwd] => password [email] => test@test.com [contact] => my@jabber )
smittt Отправлено: 15 Октября, 2013 - 14:19:08 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4329
Чуть повоевал с твоим последним кодом, извини, пошел по пути наименьшего сопротивления..
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.         ini_set('display_errors',1);
  4.         error_reporting(E_ALL);
  5.         include("#mysql.inc");
  6.         if (isset($_POST['login'])){
  7.                 $login = mysql_real_escape_string($_POST['login']);
  8.                 $passwd = mysql_real_escape_string($_POST['passwd']);
  9.                 $query = "SELECT * FROM users WHERE login='$login' AND passwd='$passwd'";
  10.                 $res = mysql_query($query) or trigger_error(mysql_error().$query);
  11.                 if ($row = mysql_fetch_assoc($res)){
  12.                         session_start();
  13.                         $_SESSION['uid'] = $row['id'];
  14.                         $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  15.                         echo $res;
  16.                         echo $row;
  17.                         }
  18. /*              header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);*/
  19.                 exit();
  20.                 }
  21. ...


вывод

PHP:
скопировать код в буфер обмена
  1.  
  2. https://ххххх/pass/login1.php
  3. Resource id #4Array


а значит запрос выполняется..
smittt Отправлено: 15 Октября, 2013 - 13:29:01 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4329
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. https://ххххх/pass/test.php // проверка работы сессий
  3. https://ххххх/pass/info.php // phpinfo()
  4. https://ххххх/pass/testses.php // тестовый скрипт с подключаемой авторизацией
  5. https://ххххх/pass/login1.php // авторизация
  6. https://ххххх/pass/testses.php.txt
  7. https://ххххх/pass/login1.php.txt
  8.  
  9. DROP TABLE IF EXISTS `users`;
  10. CREATE TABLE `users` (
  11.   `id` int(10) NOT NULL,
  12.   `login` varchar(100) DEFAULT NULL,
  13.   `passwd` varchar(100) DEFAULT NULL,
  14.   `email` varchar(100) DEFAULT NULL,
  15.   `contact` varchar(100) DEFAULT NULL,
  16.   PRIMARY KEY (`id`)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  18.  
  19. -- ----------------------------
  20. -- Records of users
  21. -- ----------------------------
  22. INSERT INTO `users` VALUES ('1', 'admin', 'password', 'test@test.com', 'my@jabber');
  23.  

проверку работоспособности авторизации провожу вот так :
PHP:
скопировать код в буфер обмена
  1. ....
  2.         if ($row = mysql_fetch_assoc($res)){
  3.                         session_start();
  4.                         $_SESSION['uid'] = $row['id'];
  5.                         $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  6.                         } else {
  7.                         echo "error password";
  8.                         }
  9. /*              header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);*/
  10.                 exit();
  11.                 }
  12. ....

на не верный пароль , выдает еррор пассворд.
smittt Отправлено: 15 Октября, 2013 - 12:30:58 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4329
ugin_root пишет:
Да пробовал. У вас база данных есть? табличка users с полями uid, login, password? Если да то всё должно работать. Что происходит в mysql.inc? Где вы подключаетесь к БД?

С базой данной нормально все! Авторизация проходит нормально!
Я почему то предполагаю, что проблема где то в return ибо все остальное вроде работает, авторизация проходит , var_dump сессии говорит, что то вроде
CODE (htmlphp):
скопировать код в буфер обмена
  1. array(2) { ["id"]=> string(1) "1" ["ip"]=> string(12) "46.хх.ххх.хх" }
smittt Отправлено: 15 Октября, 2013 - 10:58:46 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4329
ugin_root пишет:
перенеси exit() в последний блок else

Уважаемый, мне не помогло..
Вы, попробовали так? У вас работает?
smittt Отправлено: 15 Октября, 2013 - 06:12:57 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4329
ugin_root пишет:
1) Функцию session_start() нужно вызвать до любого вывода, подробнее тут, а у тебя выводится '111' до функции session_start()
2) Твои '222OK111' не выведутся по тому что у тебя в конце скрипта стоит функция exit()

Хорошо, спасибо! Если не сложно, расскажи как это должно работать тогда?
http://phpfaq[dot]ru/sessions
smittt Отправлено: 15 Октября, 2013 - 04:34:33 • Тема: проблема с сессией • Форум: Если скрипт не работает

Ответов: 16
Просмотров: 4329
Доброго времени суток всем.
проблема со скриптом авторизации.
скажем login1.php
PHP:
скопировать код в буфер обмена
  1. <?
  2.         ini_set('display_errors',1);
  3.         error_reporting(E_ALL);
  4.         include("mysql.inc");
  5.         if (isset($_POST['login']))
  6.         {
  7.                 $login = mysql_real_escape_string($_POST['login']);
  8.                 $passwd = mysql_real_escape_string($_POST['passwd']);
  9.                 $query = "SELECT * FROM users WHERE login='$login' AND passwd='$passwd'";
  10.                 $res = mysql_query($query) or trigger_error(mysql_error().$query);
  11.                 if ($row = mysql_fetch_assoc($res))
  12.                 {
  13.                         session_start();
  14.                         $_SESSION['id'] = $row['uid'];
  15.                         $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  16.                 }
  17.         header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  18.         exit;
  19.         }
  20.         if (isset($_GET['action']) AND $_GET['action']=="logout")
  21.                 {
  22.                         session_start();
  23.                         session_destroy();
  24.                         header("Location: http://".$_SERVER['HTTP_HOST']."/");
  25.                         exit;
  26.                 }
  27.         if (isset($_REQUEST[session_name()])) session_start();
  28.         if (isset($_SESSION['id']) AND $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) return;
  29.         else
  30.         {
  31. ?>
  32. <form method="POST">
  33. <input type="text" name="login"><br>
  34. <input type="password" name="passwd"><br>
  35. <input type="submit"><br>
  36. </form>
  37. <?
  38.         }
  39. ?>


далее вставляю эту авторизацию в test.php
PHP:
скопировать код в буфер обмена
  1. <?
  2.         echo 111;
  3.         require "login1.php";
  4.         echo 222;
  5.         echo "OK";
  6.         echo 111;
  7. ?>
  8.  

ошибок ни каких нет, но и выводится только 111 и снова авторизация.
вставляя login1.php в другие скрипты, после ввода логина пароля, остается все равно авторизация(
подскажите пожалуйста уважаемые, в чем может быть засада..
(Добавление)
вообще сессии работают.
вот такой скрипт работает "на ура".
PHP:
скопировать код в буфер обмена
  1. <?
  2. if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
  3. echo "Вы обновили эту страницу ".$_SESSION['counter']++." раз. ";
  4. echo "<br><a href=".$_SERVER['PHP_SELF'].">обновить";
  5. ?>

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB