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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SESSION, Что? Где? Когда? 
:(
    Опции темы
APro
Дата 24.7.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В очередной раз зравствуйте!

Моё изучение PHP продвигается семимильными шагами. Когда мне буду вручать Олимпийскую мидаль по программированию, я обязательно поблагодарю Vingrad, всех админов, ну и тех кто мне помогал... Ладно, об этом позже  smile 


Объясните пожалуйста мне, как вобще работать с сессиями. Как начинать, как заканчивать и всё, что может понадобится при написании какого-либо скрипта.

Если лень писать, то можно хотябы ссылки на статиь (желательно на русском).

Пошу не посылать меня в поиск, так как я там был... Но ничего тольком не понял. К сожалению...

--
Код

$first = "Заранее";
$second = " спасибо!"
$result = $first.$second;
echo $result;

 smile  smile 


--------------------
Никогда не спорь с дураком, другие могут не заметить между вами разницы.
Чем реже открываешь рот, тем меньше слышишь глупостей.
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 25.7.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



PM ICQ   Вверх
APro
Дата 25.7.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



smile Я не понял как работают сессии. Вернее я понял, что можно передавать данные через них на другие страницы, но когда я это понял и начал делать авторизацию для сайта, я так и не допёр что через сессию нужно передовать... Можете кто-нибудь помоч?

Я посмотрел:
Код

<?php
session_start(); 
session_register("start"); 

if (!isset($login)){$login="";}
if (!isset($password)){$password="";}


if(!isset($_SESSION['start'])) {
if($login == 'login' && $password == 'pass' ) {
 $_SESSION['start'] = time();
} else {
 echo ("
  <FORM action=\"admin.php\" method=\"POST\">
  Логин: <INPUT type=\"text\" name=\"login\" value=\"".$login."\"><BR>
  Пароль: <INPUT type=\"password\" name=\"password\"><BR>
  <INPUT type=\"submit\" value=\"войти\">
  </FORM>
 ");
 exit;
}
}
?>


и окончательно запутался. Получается что если значения login и password верны, то в сессию записывается время, а если не верны, то форма ввода этих переменных.


Вобще, как сделать авторизацию с сессиями? (чтобы при заходе в index.php да и в любой другой скрипт было видно, что зашёл авторизированный пользователь)

Это сообщение отредактировал(а) APro - 25.7.2008, 13:03


--------------------
Никогда не спорь с дураком, другие могут не заметить между вами разницы.
Чем реже открываешь рот, тем меньше слышишь глупостей.
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 25.7.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Предположим, есть исполняемая программа. EXE файл. Принцип, как она будет работать с конфигурационным файлом, INI например, представляете? Теперь кидаем эту программу в инет. Делаем INI файл для каждого пользователя (хранилище сессии). Теперь  надо пользователй различать. В Куку пишем SID - идентификатор сессии, т.е. привязываем его к конкретному  INI файлу. Если пользователь будет передавать SID, мы ьудем загружать данные из INI. Не будет передавать - не будем.

INI в данном случае - абстракция.
Сессия - просто реализация. Алгоритм авторизации можно глянуть тут: http://base.vingrad.ru/view/2711-Praktikum...ii-Avtorizatsii
PM ICQ   Вверх
APro
Дата 25.7.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Круто, только объясни мне, файл который ты приложил в конце, это уже можно использовать как модуль Регистрация/Авторизация?

Добавлено через 3 минуты и 19 секунд
Хм, и ещё, а как использовать этот файл? Ну, в том смысле что его можно просто include? Или как?


--------------------
Никогда не спорь с дураком, другие могут не заметить между вами разницы.
Чем реже открываешь рот, тем меньше слышишь глупостей.
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 25.7.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Этот вопрос тут задают пару раз в месяц. Отвечаю. Если хотите чему-то научиться, смотрите на костяк, принцип работы. Если нет - копируйте, используйте, только потом не говорите, что у вас где-то там в скрипте косяк, где-то еще и т.п....
Файл рабочий на версии PHP<5

А как по вашему еще можно подключить файл? Нет, ну я могу, как один из альтернативных вариантов предложить eval(file_get_contents), но боюсь в этой ситуации он не сработает. Скорее всего не сработает...
include, конечно же.

Это сообщение отредактировал(а) Mal Hack - 25.7.2008, 13:45
PM ICQ   Вверх
Feldmarschall
Дата 25.7.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Нет, не стоит.
Во-первых, там нет регистрации.
Во-вторых, там половина функций устарела (как и по первой ссылке, кстати).
В-третьих, использовать вообще ничего не надо. Если хочешь, чтобы работало, надо делать только самому. 

По поводу твоего кода.
Логика можно сделать попроще. Разделить авторизацию на два этапа.
Первый - проверка. 
Делается ЭЛЕМЕНТАРНО:
Код

<?
session_start();
if (!isset($_SESSION['login'])) {
?>
  Вы не авторизованы!M<br>
  <a href="login.php">авторизация</a>
<?
  exit;
}


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

Это сообщение отредактировал(а) Feldmarschall - 25.7.2008, 13:49
PM   Вверх
Mal Hack
Дата 25.7.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Feldmarschall @  25.7.2008,  14:48 Найти цитируемый пост)
Во-первых, там нет регистрации.

Обратите внимание на п.4, каркасом чего он является?
PM ICQ   Вверх
Feldmarschall
Дата 25.7.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



извините, ошибся =)
PM   Вверх
APro
Дата 25.7.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну вобще то, пока я писал своё сообщение что не понимаю, я на самом деле начал понимать... Вернее мне пришла в голову мысль.

Короче, юзер ввёл логин и пароль - проверили. Если нашли в БД такой логин и пароль, то записываем в в БД хеш(логин+пароль+ip+секретное значение) и дальше через сессию передаем. (секретное значение - пусть будет там циферка или слово какое-нибудь)

Проверяем авторизован пользователь или нет:
Тот переданный хеш ищем в таблице, если найден, то пользователь есть. Выводим надпись "Привет, " + логин пользователя.

Ну и раскручиваем тему дальше...

Вобщем так можно сделать? (конечно можно, а из соображений по безопасности? Нельзя будет подделать сессию?)

Добавлено через 5 минут и 38 секунд
Почему-то при запуске qwe.php выскакивает ошибка:
Fatal error: Cannot redeclare hash() in C:\xampp\htdocs\nick\qwe.php on line 22
И ещё, в MySQL запросе:
Код

CREATE TABLE `auth_members` (
`id` SMALLINT NOT NULL AUTO_INCREMENT ,
`name` TINYTEXT NOT NULL ,
`password` TINYTEXT NOT NULL ,
PRIMARY KEY ( `id` ) 
);

CREATE TABLE `auth_sessions` (
`member` SMALLINT NOT NULL ,
`time` INT( 14 ) NOT NULL ,
`hash` TINYTEXT NOT NULL ,
);


Ошибка. Там же не должно быть запятой после `hash` TINYTEXT NOT NULL , в таблице `auth_sessions`


--------------------
Никогда не спорь с дураком, другие могут не заметить между вами разницы.
Чем реже открываешь рот, тем меньше слышишь глупостей.
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 25.7.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(APro @  25.7.2008,  14:58 Найти цитируемый пост)
Короче, юзер ввёл логин и пароль - проверили. Если нашли в БД такой логин и пароль, то записываем в в БД хеш(логин+пароль+ip+секретное значение) и дальше через сессию передаем. (секретное значение - пусть будет там циферка или слово какое-нибудь)

Секретное значение - излишне... HTTP_USER_AGENT сюда можно для начала вставить.

Цитата(APro @  25.7.2008,  14:58 Найти цитируемый пост)
Fatal error: Cannot redeclare hash() in C:\xampp\htdocs\nick\qwe.php on line 22

Не поленитесь, вбейте в поиск. Два дня назад уже обсуждалось.

Цитата(APro @  25.7.2008,  14:58 Найти цитируемый пост)
Ошибка. Там же не должно быть запятой после `hash` TINYTEXT NOT NULL , в таблице `auth_sessions` 

mysql выдает ошибку?
Вот в качестве примера: 
Код
enum AAA {ONE, TWO, THREE};
enum BBB {ONE, TWO, THREE,};

Код на плюсах. Ни один компилятор вам даже варинга не выкинет. Код 100% рабочий, но если запятой не поставить, то, т.к. все элементы перечисления в процессе трансляции переводятся в int, то получим: 1, 2, 3 (в ААА), 4,5,6  в BBB (это если запятую поставить)... Если нет, то будет 1, 2, 3 и 1, 2, 3...
PM ICQ   Вверх
Feldmarschall
Дата 25.7.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



APro, не нужно ничего в бд писать. у тебя сессия есть для этого.
секретничать тоже не нужно. можешь написать логин, или id - в общем, что нужно для идентификации пользователя.
И ВСЕ.
сессии - это очень просто. не надо пытаться делать их сложнее ,чем они есть

Добавлено через 9 минут и 20 секунд
Казалось бы, авторы пхп сделали работу с сессиями простой до предела - одна-единственная переменная, $_SESSION. Присвоил значение его элементу - положил в сессию. Прочитал элемент - достал из сессии. 
Не забыть еще session_start().
ВСЁ! 
Две строчки!
И все равно люди умудряются в этих двух соснах заблудиться.
PM   Вверх
APro
Дата 27.7.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а если например в сессии хранить просто ID, то получается, что его можно подделать. Если например злоумышленник узнает ид админа, то у него будут права, так ведь? (или просто сессию нельзя подделать?)

Я читал, что сессию можно подделать и тогда хана... (или это только когда куки используешь?)

А сессия делается так, как я понимаю:
Код

<?php 
    session_start(); 
    $_SESSION['sname'] = 'id'; 
?>


А на остальных скриптах проверять сессию sname с ID'ом, и если такой есть в БД, то тогда убирать форму ввхода и писать Welcome сообщение?


--------------------
Никогда не спорь с дураком, другие могут не заметить между вами разницы.
Чем реже открываешь рот, тем меньше слышишь глупостей.
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 27.7.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



ID сессии пишется в куку и передается пользователю. При каждом обращении к скрипту кука передается. Вот ее подделать можно.
Для этого вы и должны делать проверку, на то что пользователь именно тот, кто вам нужен. Самый простой вариант сравнивать USER_AGENT, IP пользователя, его имя с где-ть сохраненным. Естественно зашифрован.
PM ICQ   Вверх
Feldmarschall
Дата 27.7.2008, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Цитата(APro @  27.7.2008,  17:53 Найти цитируемый пост)
Я читал, что сессию можно подделать 

А я читал, что инопланетяне похитили президента, а Киркорова родила двойню. 
Надо не только читать, но и думать. 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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