Сесия за логин с проверка на юзър и парола !

dakata__92

Super Moderator
Здравейте! Мъча се тук да направя сесия, която когато се подадат на логин формата име и парола се проверява дали има такън потребител с такава парола и съсдава сесия, която преминава на друга страница с проверка на страницата за легитимност на сесията и дали е същия потребител.

това е логина след формата:
login.php
PHP:
<?php 
$host="localhost"; // Host name 
$username="root@localhost"; // Mysql username 
$password=""; // Mysql password 
$db_name="test"; // Database name 
$tbl_name="members"; // Table namе

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username and password sent from signup form 
$user = htmlspecialchars($_POST['user']); 
$pass = htmlspecialchars($_POST['pass']); 
$compare = md5($pass);

$sql = ("SELECT * FROM $tbl_name WHERE user='$user' and pass='$compare' LIMIT 1"); 
$result = mysql_query($sql); 

// Mysql_num_row is counting table row 
$count = mysql_num_rows($result); 
// If result matched $myusername and $mypassword, table row must be 1 row 

if($count == 1)
{ 
	// Register $user, $pass and redirect to file "loginpro.php" 
	session_register("user");
	$_SESSION['user'] = $user; 
	session_register("pass"); 
	header("location:pro.php"); 
} 
else 
{ 
	echo "Грешен Потребител или Парола!"; 
} 
?>

А това е другата страница: pro.php
Къде греша ?
PHP:
<?php 
session_start();
$_SESSION['user'] = $user;
if (isset($HTTP_SESSION_VARS['user'])) 
{  
	$user = $HTTP_SESSION_VARS['user'];
	echo"Zdravei $user";	
}
else
{
	header("location:index.php");
}
?>
 
PHP:
<?php 
session_start();

if (isset($_SESSION['user'])) 
{  
        $user = $_SESSION['user'];
        echo"Zdravei $user";    
}
else
{
        header("location:index.php");
}
?>
 
Благодаря работи ! Имам и въпрос по този начин сесията уязвима ли е ? В смисъл, могат ли да я откраднат или да направят някаква СЯЛ инжекция, въпреки, че на страницата няма връзка към базата ? Как да я направя по-сигорна и чрез нея да съм сигорен, че се е логнал даден потребител от таблицата с потребители (един вид да знам кой се е логнал и дали сесията е още активна) ? Нещо от този сорт ли трябва да направя ?
PHP:
<?
session_start();
include "config.php";
function site_head($title)
{
if($_SESSION['logged']==true) {
$rq = mysql_query("UPDATE `users` SET status='".time()."' WHERE id='".$_SESSION['userinfo']['id']."'");
}
ob_start();
?>
 
eddyy93 каза:
login.php трябва да има session_start();

Добавих го и там, въпреки, че работеше ! Освен по име на акаунта, да създам ли и сесия на паролата и двете да вървят едновременно, като тя е хеширана ?
 
Не, даже ще ти препоръчам в сесите да вкарваш само числа (тоест id на потребитела и това е) . И пред всяка сесия слагаш (int).

В базата данни проверяваш по ID - то (тоест сесията) и така вадиш вече Името, там статуси разни.

Макар че така заявките ти стават повече, поне ще си сигурен, че само числа ще минават, разбира се говоря за сессии който ще ги ползваш в заявка.

Сега ако искаш само една сесия да ти взема името на потребитела да му го показваш на разни места в сайта (без да е ползваш в заявки) , си ползвай и текст в сесията. Но пароли не е препоръчително.
 
Имам графа id в таблицата, която дава номер на профила и абоната ! Как да я въведа в логина кое да приравня на нея, за да го направя както ти казваш.
 
Не те разбрах много добре.
Но имам предвид с поста горе:

- Ако ползваш сесия, за да проверяваш разни работи в базата данни, и я ползваш директно с някакъв текст или нещо. Не е най-добрият вариянт. Може да го правиш по ID като сесията ще приеме стойност число (int) на даденият юзер.

- Ако ползваш сесия примерно за да изведеш на даден юзер неговот име някаде по сайта ползвай го без id и излишни заявки, ами директно името му в сесията. Но това при условие, че няма никаде с тази сесия да проверяваш в база данни и т.н.

----------------

- За проверки в базата данни за странична информация за някой юзер ползваш 1 вата сесия - негово ID (int).

- 2 рата сесия само за показване, на неговият юзер name, статус и др. неща. Но не я вкарвай в заявки.

-----------------

Пароли в сесия не е много за предпочитане. Същото се отнася за cookie, също там не е препоръчително да вкарваш информация за юзера.
 
Как тогава да направя заявката тук, че да извеждам и ID -то на потребителя ?
PHP:
$sql = ("SELECT * FROM $tbl_name WHERE user='$user' and pass='$compare' LIMIT 1");
 
Е тя ти го селектира - " * ", звездичката означава да селектира всичко от таблицата (вкл. и ID).

Както изкарваш username, така изкакарваш и ID.

PHP:
$sql = ("SELECT * FROM $tbl_name WHERE user='$user' and pass='$compare' LIMIT 1"); 

$result = mysql_query($sql); 

$rowid=mysql_fetch_assoc($result);

$idto=$rowid['id'];

echo $idto;
 
Благодаря ти много за разяснението, което ми е от доста голяча полза ! Благодаря, напъбно заслужено + 1 :)
 
Винаги преди $_SESSION['id'] - сесията която ще държи ID - то слагай преди нея (int).

Примерно:
PHP:
$userid=(int)$_SESSION['id'];

mysql_query("SELECT * FROM `users` WHERE id='$userid' ");
 

Горе