Hi seemagaur,
I can't see any immediate problems with your code, but my techniques for doing the same are different:
1) Don't mess with Session_Start and Session_End events (you've already got the redirect in your page check, and your code in Session_End seems redundant compared to the rest).
2) In your login script, set your Session("Loggedin") = "Yes" after successful login.
3) In your page test for being logged in, make your test check for whether they have logged in (not that they haven't logged in). That is, if they have not logged in, no session var will be set and you can first check the var to not be "IsEmpty()" and then check for a value of "Yes". Comparing an empty session var against "Loggedin" = "No" will probably not evaluate if the session var is empty.
As for the timing out after a minute - I'm not sure. Keep in mind the following factors could restart your application if in a shared development enviroment and drop your session: 1) Saving new web.config or machine.config, 2) rebuilding the application, 3) restartig IIS
Maybe some of that will help.