Вопрос по сессиям

С.

Продвинутый новичок
Общее правило такое: стартовать сессию надо в следующих случаях:

1). Пришли логин и пароль (пользователь пытается авторизоваться) && пароль и логин верны.

2). Если результат session_name() не пуст (клиент уже находится в сессии). Проверить признак авторизованности!
 

MisterBonus

Новичок
Автор оригинала: С.
Как же ты используешь содержимое сессионной переменной ДО ТОГО как стартовал сессию?
Я ещё вообще не разобрался с этими сессиями... И вообще не помню где я использую содержимое сессионной переменной до старта сессии! Вроде нигде. Может ты что напутал?
 

zerkms

TDD infected
Команда форума
С.
не баламуть человека - он и так весь запутался. я написал скетч того же самого алгоритма. если в нём что-то не так - лучше поправь его.
 

MisterBonus

Новичок
Всем привет!:)
У меня как всегда немного вопросов... Интересно просто узнать...

Автор оригинала: zerkms
запрос на выборку примерно такой: 'SELECT ... WHERE `login` = "' . mysql_real_escape_string($login) . '" AND password так же как логин
зачем mysql_real_escape_string вставлять в сам запрос? (наверное просто так... для удобства...)
и немного недопонимаю вот эту конструкцию... : ' " ' ' " '
- почему запрос стоит в одинарных ковычках, а присоединённая функция помещается сначала в двойные... а потом ещё и в одинарные...
я думал должно быть так: "запрос".присоединённое."продолжение запроса";
и знак присоединения . стоит не перед одинарной ковычкой, а после (т.е. внутри одинарных ковычек... вроде в этом случае он должен выступать в роли части строки, как и последующая функция...)

Автор оригинала: zerkms
htmlspecialchars используем только тут, для вывода в браузер. например:
echo 'Привет, ' . htmlspecialchars($_SESSION['login']);
- почему переменные, участвующие в запросе не нужно подвергать обработке htmlspecialchars? Вроде это должно повысить безопасность работы с БД... (оградить её в какой-то степени от SQL-инъекций... исключить возможность попадания в неё "опасных" символов, которые могут являться частью какого-нибудь запроса...)

Заранее спасибо за ответ!
 

baev

‹°°¬•
Команда форума
почему переменные, участвующие в запросе не нужно подвергать обработке htmlspecialchars? Вроде это должно повысить безопасность работы с БД... (оградить её в какой-то степени от SQL-инъекций... исключить возможность попадания в неё "опасных" символов, которые могут являться частью какого-нибудь запроса...)
MisterBonus, Вам выше ссылку дали: http://phpfaq.ru/slashes — Вы туда, похоже, даже не заглядывали.

немного недопонимаю вот эту конструкцию... : ' " ' ' " '
В «двойные» помещается не функция, а строковая переменная (являющаяся результатом выполнения функции).
Про строки читайте тут: http://dev.mysql.com/doc/refman/5.1/en/string-types.html
и тут: http://www.php.net/manual/en/language.types.string.php (тут и про кавычки все подробности)

И прочтите уже, наконец, вот это:
http://dev.mysql.com/doc/refman/5.1/en/insert.html
 

Фанат

oncle terrible
Команда форума
baev
ты бы ему лучше на точку ссылок дал
а то ж он синтаксиса пхп не понимает, рантье недоделаный :), а ы ему мускуль
 

MisterBonus

Новичок
Как же всё-таки не стартовать сессию до авторизации? Кто-нибудь поможет? (php.net возможно и хороший сайт, но английский я не очень знаю...)
Заранее спасибо!
 

MisterBonus

Новичок
Написано-то по русски... Только вот проблема в том, что то, что по статье вроде как должно работать... у меня не работает: когда я на каждой странице (кроме страницы авторизации...) в самом начале пишу строку:

if (isset ($_SESSION['ip']) and $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) {session_start();}

сессия теряется... ($_SESSION['ip'] создаётся при авторизации) зато если не провожу проверку ( т.е. сразу пишу session_start(); ), всё работает нормально...
 

AmdY

Пью пиво
Команда форума
до того как сделал session_start _нельзя_ пользоваться $_SESSION, потому что его ещё _нет_
 

MisterBonus

Новичок
Что-то я недопонимаю...
Мне нужно что б сессия НЕ стартовала ДО авторизации пользователя. Если $_SESSION не существует, значит стартовать сессию мне и не нужно. Как же мне проверить отсутствие сессии?
 

AmdY

Пью пиво
Команда форума
При вызове session_start() вызывается open, затем read, который открывает файл сессии, десериализует данные и возвращает их в суперглобальную переменную $_SESSION(которая до этого _пустая_), при этом данные которые записывали туда до старта естественно перезаписываются.
в твоём случае $_SESSION['ip'] никак не может появиться пока сессия не стартуется.
тебе видимо нужна проверка isset($_COOKIE[session_name()])
 

MisterBonus

Новичок
zerkms, недопонял что ты хочешь мне сказать - ты предлагаешь проверять наличие сессии проверяя куки (в этом случае ты сам ранее предлагал проверять существование сессионной переменной ($_SESSION['login']) для определения наличия сессии... :)) или ...

AmdY, а если у пользователя отключены куки, проверить наличие сессии невозможно?
 

AmdY

Пью пиво
Команда форума
ты не понимаешь принцип работы сессий.
от пользователя приходить в куке номер сессии, если этот номер есть, ты стартуешь сессию session_start(), если куки нет.
PHP:
if (isset($_COOKIE[session_name()])) {
session_start();
и дальше сколько хочешь юзаешь $_SESSION
} else {
здесь нельзя использовать $_SESSION
}
передавать идентификатор без кук не секъюрно и неудобно, проще посылать пользователя лесом.
 
Сверху