'<bo', а через час дослать 'dy>...</html>', то пользы от этого будет ноль).
su -
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
apt-get update
apt-get install oracle-java8-installer
exit
Хеш пароля храним только в БД и проверяем один раз, при логине, повторно вычислив его из пароля, введенного пользователем. Все! Больше он не не понадобится аж до следующего логина.
Если логин был успешный (т.е. хеш, вычисленный из присланного пароля совпал с тем, что хранится в БД), генерируем токен - другое (случайное, одноразовое) число. Вот его можем хранить в куке (или еще как-нибудь, например, в hidden поле - главное, чтоб браузер прислал нам его при следующем запросе) и в сессии (на сервере), чтоб когда придет этот самый запрос, можно было сравнить.
Это нужно, чтоб отличить "правильный" запрос (с токеном, который мы сами только что выдали) от "левого". Если совпадает - ОК, значит, это не "левый" запрос. Тогда генерируем новое случайное число, для следующего запроса, и т.д. Если же токен в запросе не совпадает с текущим токеном в сессии - убиваем вессию и снова требуем ввод пароля.
Ну, а идентификатор в БД - это то же ID пользователя, или username... что угодно! Его при успешном логине (в самом начале) просто сохраняем в сессии (один раз) и дальше пользуемся им для выборки из БД и т.д.