А где вызов session_start()?
UPD: И еще вдогонку:
1. Используйте пробелы, а не табуляцию. Я и сам бы табуляцию использовал. Но так принято. Иначе при работе в команде будут проблемы.
2. Отступы соответственно в 4 пробела.
3. Меньше пустых строчек.
4. Не оставляйте невидимые символы (пробелы, табуляции) в конце строк или в "пустых" строках. Очень обескураживает, когда нажимаешь на [End], а оказываешься не в видимом конце строки, а морковь знает где.
UPD2: ПОЧЕМУ ВСЕ до сих пор используют mysql_*? Есть же PDO. И не надо ничего экранировать - ведь можно и забыть это сделать, и уже SQL injection уязвимость готова.
$pdo = new PDO(sprintf('%s:host=%s;dbname=%s', 'mysql', 'localhost', 'dbname'), 'user', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8; SET CHARACTER SET utf8;'));
$stmt = $pdo->prepare('
SELECT `id`, `user`
FROM `rust_users`
WHERE `user` = :user
AND `password` = :password
LIMIT 1');
$stmt->execute(array(':user' => $user, ':password' => $password));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
И ни о каком экранировании задумываться не надо.
UPD3: Это конечно спорно, но я бы вместо
if(data == 0)
рекомендовал писать
if(0 == data)
, а в более общем виде
if([constant|expression|function call] == variable)
потому что ошибку вида
if(data = 0)
бывает очень сложно отловить. Вот вчера потратил полдня, отлаживая чужой код, из-за подобной ошибки (и таких случаев было на моей памяти немало). А если сравниваются две переменные, надо быть вдвойне внимательным.