The notice itself is not the problem. That is caused by attempting to read from the $_SESSION superglobal without having the data in it. The next line indicates what you should do; you must always use isset() to verify something exists before attempting to read from it. So the problem itself is elsewhere.
So what you should see happen is as such. When you hit the index.php page the first time for the session, you should see an error with undefined index (which can be fixed with the isset check). Then, you should login and it should take you back to the index without the notice. That's if its functioning properly.
Find this in index.php:
$_SESSION["id"] = $id;
$_SESSION["user_login"] = $user_login;
$_SESSION["password_login"] = $password_login;
Directly after it. Do you see everything within the sessions specified? If so, then add a print_r($_SESSION); immediately after the call to session_start() in header.inc.php.
Also, you should change <? to <?php. Short form notation is a feature of the language, and is not guaranteed to be available on every server. <?php will always work. Try searching as well for tutorials built in at least 5.2+ as well (I didn't see this link here, but there's some oldish stuff), things like the mysql library are now obsolete; they are replaced with the mysqli library and PDO is another option.
Oh yes that reminds me. There is a difference between what you allow during registration and login. One accepts only alphanumeric characters, and the other accepts any characters but removes html from them. You'll need to keep that in mind if you are attempting to use a username or password with non-alphanumeric characters (my name wouldn't work for example; I could sign up, but not log in).