REDPUMAN
7.04.2008 - 22:29
Привожу код 3-х файлов:
страница - index.php
Код |
<? if(!isset($_session['autor'])) { print '<div id="lp01"> </div>'; print '<div id="lp02"> АВТОРИЗАЦИЯ >> </div>'; print '<div id="lp03">'; print '<form method="post" action="action/autor.php">'; print '<pre> ЛОГИН: <input type="text" size=15 name="a_login"> </pre>'; print '<pre> ПАРОЛЬ: <input type="password" size=15 name="a_password"> </pre> <br>'; print '<center> <input type="image" src="images/btn01.gif"> </center>'; print '</form>'; print '</div>'; } else { print '<div id="lp01"> </div>'; print '<div id="lp02"> <a href="user_cab.php"> Вход </a> </div>'; } ?>
|
скрипт - autor.php (в папке action)
Код |
... $_session['autor']='1'; $_session['alogin']=$_POST['a_login']; header('Location: ../user_cab.php'); ?>
|
страница - user_cab.php
Код |
<? if(isset($_session['alogin'])) print $_session['alogin']; ?>
|
При заполнении формы на index.php данные передаются в скрипт autor.php, где они подвергаются проверки на подлиность и при положительном результате должны сохраняться в $_session и переходить на страницу данного юзера, где выводится сообщение типа "привет "+логин_юзера, а при переходе на главную (index.php) форма уже не должна отображаться. Вобщем в этом и вся проблема: &_session не сохраняет переменные. Проверял var_dump($_session) - на autor.php выдает правильно содержимое, а на index.php и user_cab.php - array(0).
В начале каждой страницы:
Код |
<? session_start(); ini_set('display_errors',1); error_reporting(E_ALL); ?>
|
На всякий случай php.ini:
Код |
[Session] session.save_handler = files session.save_path = "e:/www/php5/tmp" session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.cookie_httponly = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 100 session.gc_maxlifetime = 1440 session.bug_compat_42 = 1 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 4 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
|
Большая просьба не посылать в "поиск", искал, везде, уже голова болит.
Заранее благодарен!
Спустя 2 минуты, 24 секунды (7.04.2008 - 21:31) NRG написал(а):
попробуйте не $_session а $_SESSION .....
результат отпишите сюда....
Спустя 15 минут, 29 секунд (7.04.2008 - 21:47) REDPUMAN написал(а):
Цитата(NRG @ 8.4.2008, 0:31) [snapback]36585[/snapback]
попробуйте не $_session а $_SESSION .....
результат отпишите сюда....
Все получилось!
Спасибо огромное! Даже малость стыдно
, вроде как бы пустяк. Нигде не встречал указания на регистр написания!
Еще раз спасибо!
Спустя 8 месяцев, 9 дней, 11 часов, 37 минут, 16 секунд (17.12.2008 - 10:24) novice написал(а):
Такая же проблема, при авторизации, выводит сообщение "Вы вошли под ником: ВасяПупкин", но когда переходишь на другую страницу и возвращаешься обратно, скрипт выдаёт просто "Вы вошли под ником:"
Где ошибка, проверьте пожалуиста.
PHP |
<?php session_start(); include_once("../connect.php"); if(isset($_POST['submit'])) { $login = $_POST['login']; $password = $_POST['password']; $query = "SELECT id, login, password FROM users WHERE login ='{$login}' AND password='{$password}' LIMIT 1"; $sql = mysql_query($query) or die(mysql_error()); if (mysql_num_rows($sql) == 1) echo 'Авторизация прошла успешно'; else echo 'Неправильное имя или пароль'; { $valid_user = $login; session_register("valid_user") ; } } if (session_is_registered("valid_user")) { echo "Вы вошли под ником: $valid_user <br>" ; echo "<a href=\"logout.php\">Выход</a><br>"; } else { if (isset($login)) { // если пользователь пытался зарегистрироваться, // но возникла ошибка echo "Не вошли"; } else { // если пользователь либо не пытался зарегистрироваться, // либо покинул сайт echo "Не зарегистрированы.<br>"; } }
|
Спустя 10 минут, 30 секунд (17.12.2008 - 10:34) kirik написал(а):
novice, почему должно показываться что-то, если массив $_POST пустой?
Спустя 17 минут, 17 секунд (17.12.2008 - 10:52) novice написал(а):
Как тогда правильно сделать?
Спустя 7 минут, 34 секунды (17.12.2008 - 10:59) kirik написал(а):
PHP |
$_SESSION['login'] = $login; // вставить там, где "echo 'Авторизация прошла успешно';" echo "Вы вошли под ником: {$_SESSION['login']} <br>" ; // заменить |
Спустя 43 минуты, 2 секунды (17.12.2008 - 11:42) novice написал(а):
Круто, получилось, спасибо!
Кнопку выхода я сделал такую
session_start();
session_unregister("valid_user");
session_destroy();
Выходит всё гуд.
Поиду теперь дальше пробовать.
Спустя 1 день, 19 часов, 44 минуты, 29 секунд (19.12.2008 - 07:27) novice написал(а):
И в продолжении этой же авторизации и сессии.
Сделал таблицу в файле Index.php проинклудил справа блок авторизации
PHP |
<? session_start(); error_reporting(E_ALL); ?> <table> <tr> <td height="100%" width="90%" rowspan="2" colspan="2"> <center>1 колонка</center> </td> </tr> <td height="100%" width="10%"> <center> <? require_once("tpl/block/block_auth.php"); ?> </center> </td> <tr> <td height="100%" width="45%" > <center>2-ая колонка</center> </td> <td height="100%" width="45%" > <center>3-я колонка</center> </td> <td height="100%" width="10%" > <center>4-ая колонка</center> < |
Когда ввожу зарегистрированный ник или пароль, то отображает на этой же странице
Добро пожаловать: Вася
Выход
Когда не вводишь данные а просто нажимаешь вход, то выдаёт ошибку
Notice: Undefined index: login in /var/home/bind_home/tora/web/mod/NEW_TEST/reg/tpl/block/block_auth.php on line 7
Добро пожаловать:
Выход
Хотя по идее должен был отобразить обратно форму входа имени и пароля.
PHP |
<table> <tr> <td> <? if (session_is_registered("valid_user")) { echo "Добро пожаловать: {$_SESSION['login']}<br>" ; echo "<a href=\"auth/auth/logout.php\"> </a><br>"; } else { ?> <form action="auth/auth/avt.php" method="POST"> <tr> <td> </td> <td><input type="text" name="login"></td> </tr> <tr> <td> </td> <td><input type="password" name="password"></td> </tr> <tr> <td colspan="2"> <input type="submit" value="OK" name="submit"></td> </tr> </form> <? } ?> </tr> </td> |
Спустя 1 час, 48 минут, 48 секунд (19.12.2008 - 09:15) kirik написал(а):
мм.. почему должно?
скрипт работает правильно, потому как сессия с именем valid_user была зарегистрирована, пусть даже она пустая, но она есть.
поставь проверку на существование имени пользователя в сессии (тоесть если юзер залогинился, то в сессии будет его ник, в обратном случае - нет)
PHP |
session_is_registered("valid_user") // заменить на isset($_SESSION['login']) && !empty($_SESSION['login']) |
ЗЫ. & в коде замени на &
Спустя 1 час, 10 минут, 41 секунда (19.12.2008 - 10:26) netruxa написал(а):
Тему не осилил, слишкам многа букав, но увидел часть кода и решил отписаться:
PHP |
$login = $_POST['login']; $password = $_POST['password']; $query = "SELECT id, login, password FROM users WHERE login ='{$login}' AND password='{$password}' LIMIT 1"; |
не совсем безопасный код. юзайте поиск "sql injection"
Спустя 47 минут, 49 секунд (19.12.2008 - 11:14) novice написал(а):
To kirik: Да, помогло, спасибо : )
To netruxa: я пока учусь, делаю, как легче, поэтому пока пробую так делать, со временем уже можно и занятся безопасностью, сеичас пока пробую простой сайт сделать.
_____________