<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Anas Ghanem  : Session</title><link>http://weblogs.asp.net/anasghanem/archive/tags/Session/default.aspx</link><description>Tags: Session</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Changing the session ID programmatically.</title><link>http://weblogs.asp.net/anasghanem/archive/2008/12/16/programmatically-changing-the-session-id.aspx</link><pubDate>Tue, 16 Dec 2008 20:48:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6791395</guid><dc:creator>anas</dc:creator><slash:comments>2</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/12/16/programmatically-changing-the-session-id.aspx#comments</comments><description>
&lt;p&gt;In this blog, I will show how to change the Assigned session Id programmatically.&lt;/p&gt;
  
&lt;p&gt;You may ask : why I need to change the automatically generated the user session id ? well there is many possible reasons like :&lt;/p&gt;
  
&lt;ul&gt;   
&lt;li&gt;You may use the session ID to track the User activities or to implement &lt;a href="http://en.wikipedia.org/wiki/Audit_trail" mce_href="http://en.wikipedia.org/wiki/Audit_trail"&gt;audit trails&lt;/a&gt; in your system. &lt;/li&gt;
    
&lt;li&gt;Preventing &lt;a href="http://en.wikipedia.org/wiki/Session_hijacking" mce_href="http://en.wikipedia.org/wiki/Session_hijacking"&gt;Session Hijacking&lt;/a&gt; by generating a new session id after the user logged in. &lt;/li&gt;
    
&lt;li&gt;Removing the user session after logging out. &lt;/li&gt;
 &lt;/ul&gt;
  
&lt;p&gt;There could be more reasons that I don't know about them , if you know more reasons feel&amp;nbsp; free to post it in the comments section .&lt;/p&gt;
  
&lt;p&gt;Changing the Session id is an easy task in asp.net.You just need to use &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.aspx"&gt;SessionIDManager&lt;/a&gt; class.&lt;/p&gt;
  
&lt;p&gt;The class contains a lot of helpful methods ,I will list some of them :&lt;/p&gt;
  
&lt;ul&gt;   
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.createsessionid.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.createsessionid.aspx"&gt;CreateSessionID&lt;/a&gt; : returns a unique session identifier that is a randomly generated number encoded into a 24-character string. &lt;/li&gt;
    
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.getsessionid.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.getsessionid.aspx"&gt;GetSessionID&lt;/a&gt; :&amp;nbsp; gets the session-identifier value from the current Web request. &lt;/li&gt;
    
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.savesessionid.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager.savesessionid.aspx"&gt;SaveSessionID&lt;/a&gt; : saves a newly created session identifier to the HTTP response. &lt;/li&gt;
 &lt;/ul&gt;
  
&lt;p&gt;The rest of methods and class members can be found &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager_members.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionidmanager_members.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;
  
&lt;p&gt;I will now show a simple code that will print the Current SessionId and Create a new session id and save it to the context.&lt;/p&gt;
  
&lt;p&gt;[Code provided in C# ]&lt;/p&gt;
  &lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1256\uc1 \deff0{\fonttbl{\f0\fnil\fcharset178\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red43\green145\blue175;\red0\green0\blue255;\red163\green21\blue21;}??\fs20         \cf3 SessionIDManager\cf0  Manager = \cf4 new\cf0  \cf3 SessionIDManager\cf0 ();\par ??\par ??        \cf4 string\cf0  NewID = Manager.CreateSessionID(Context);\par ??        \cf4 string\cf0  OldID = Context.Session.SessionID;\par ??        \cf4 bool\cf0  redirected = \cf4 false\cf0 ;\par ??        \cf4 bool\cf0  IsAdded = \cf4 false\cf0 ;\par ??        Manager.SaveSessionID(Context, NewID,\cf4 out\cf0  redirected, \cf4 out\cf0  IsAdded);\par ??        Response.Write(\cf5 "Old SessionId Is : "\cf0  + OldID);\par ??        \cf4 if\cf0  (IsAdded)\par ??        \{\par ??            Response.Write(\cf5 "&amp;lt;br/&amp;gt; New Session ID Is : "\cf0  + NewID);\par ??        \}\par ??        \cf4 else\par ??\cf0         \{\par ??            Response.Write(\cf5 "&amp;lt;br/&amp;gt; Session Id did not saved : "\cf0 );\par ??        \}}
--&gt;
&lt;div style="background: white none repeat scroll 0% 0%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;SessionIDManager&lt;/span&gt; Manager = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;SessionIDManager&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; NewID = Manager.CreateSessionID(Context);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; OldID = Context.Session.SessionID;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; redirected = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; IsAdded = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Manager.SaveSessionID(Context, NewID,&lt;span style="color: blue;"&gt;out&lt;/span&gt; redirected, &lt;span style="color: blue;"&gt;out&lt;/span&gt; IsAdded);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(&lt;span style="color: rgb(163, 21, 21);"&gt;"Old SessionId Is : "&lt;/span&gt; + OldID);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (IsAdded)&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;lt;br/&amp;gt; New Session ID Is : "&lt;/span&gt; + NewID);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;lt;br/&amp;gt; Session Id did not saved : "&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;/div&gt;

  &lt;br&gt;
&lt;p&gt;Hope it helps.&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6791395" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Session/default.aspx">Session</category></item><item><title>Securing your web site using session</title><link>http://weblogs.asp.net/anasghanem/archive/2008/11/07/securing-your-web-site-using-session.aspx</link><pubDate>Fri, 07 Nov 2008 12:36:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6725189</guid><dc:creator>anas</dc:creator><slash:comments>3</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/11/07/securing-your-web-site-using-session.aspx#comments</comments><description>&lt;p&gt;When using&amp;nbsp; Asp.net , there is many ways to secure your web site pages . you can use Windows authentication , Or Forms Authentication services.&lt;/p&gt;  &lt;p&gt;Through asp.Net forums, I noticed that there is many developers trying to use the session to secure there web sites.they are doing this by storing some flag in the session , like storing the username , so that they can check this value in the pages to make sure that the user is logged in.&lt;/p&gt;  &lt;p&gt;Note: I recommended to not use the session to secure the web site , because session will timeout , and so your users will need to login on every timeout period ( 20 minutes by default) . also when using the session , you will need to manually manage the user roles , while you don't have to worry about that if you used Membership Services.&lt;/p&gt;  &lt;p&gt;However, if you still want to use the session ,I will show you how to correctly implement that using a custom base page class .&lt;/p&gt;  &lt;p&gt;Note: The Base Class will contains the required checks , and so you need to change your pages to inherit from this custom class instead of inheriting from "System.Web.UI.Page" class which is the Default class for ASPX pages.&lt;/p&gt;  &lt;p&gt;Ok , Take a look at the Base Page class Below :&lt;/p&gt;  &lt;div style="overflow: auto;"&gt;   &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset178\fprq1 Courier New;}}{\colortbl;??\red128\green128\blue128;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs20 \cf1 ///\cf3  \cf1 &amp;lt;summary&amp;gt;\par ??///\cf3  this page will be used as a basePage class for all pages that needs to be secured .\par ??\cf1 ///\cf3  so if you want to make some pages secured , \par ??\cf1 ///\cf3  just let them inherit from this class instead of directly  inherting from System.Web.UI.Page\par ??\cf1 ///\cf3  \cf1 &amp;lt;/summary&amp;gt;\par ??///\cf3  \par ??\cf4 public\cf0  \cf4 class\cf0  \cf6 SecuredPage\cf0  : System.Web.UI.\cf6 Page\par ??\cf0 \{\par ??\par ??    \cf4 protected\cf0  \cf4 string\cf0  LoginUrl\par ??    \{\par ??        \cf4 get\cf0  \{ \cf4 return\cf0  \cf7 "~/Login.aspx"\cf0 ; \}\par ??    \}\par ??\par ??    \cf3 // return true if the current page is the Login Page .\par ??\cf0     \cf4 private\cf0  \cf4 bool\cf0  IsLoginPage\par ??    \{\par ??        \cf4 get\cf0  \{\par ??            \cf4 return\cf0  \cf6 VirtualPathUtility\cf0 .GetFileName(Request.Path).ToLower() == \par ??                \cf6 VirtualPathUtility\cf0 .GetFileName(LoginUrl.ToLower());\par ??        \}\par ??    \}\par ??\par ??    \cf3 // get the UserName from the session\par ??\cf0     \cf4 private\cf0  \cf4 const\cf0  \cf4 string\cf0  UserNameKey = \cf7 "UserName"\cf0 ;\par ??    \cf4 protected\cf0  \cf4 string\cf0   UserName\par ??    \{\par ??        \cf4 get\par ??\cf0         \{\par ??            \cf4 return\cf0  \cf6 Convert\cf0 .ToString(Session[UserNameKey]);\par ??        \}\par ??        \cf4 set\cf0  \{\par ??            Session[UserNameKey] = \cf4 value\cf0 ;\par ??        \}\par ??    \}\par ??\par ??    \cf4 protected\cf0  \cf4 string\cf0  DefaultPage\par ??    \{\par ??        \cf4 get\cf0  \{\par ??            \cf4 return\cf0  \cf7 "Default.aspx"\cf0 ;\par ??        \}\par ??    \}\par ??    \cf4 protected\cf0  \cf4 void\cf0  RequestLogin()\par ??    \{\par ??        \cf4 string\cf0  CurrentUrl = Request.RawUrl;\par ??        Response.Redirect(LoginUrl + \cf7 "?ReturnUrl="\cf0  + Server.HtmlEncode( CurrentUrl));\par ??    \}\par ??\par ??    \cf3 // use this method to redirect the user after sucessfull login , \par ??\cf0     \cf3 // this method will make sure that the user will get redirected to the original url  that was on .\par ??\par ??\cf0     \cf4 protected\cf0  \cf4 void\cf0  RedirectFromLoginPage(\cf4 string\cf0  TargetUrl)\par ??    \{\par ??        \cf4 if\cf0  (! \cf4 string\cf0 .IsNullOrEmpty(UserName))\par ??        \{\par ??            \cf4 if\cf0  (Request.QueryString[\cf7 "ReturnUrl"\cf0 ] != \cf4 null\cf0 )\par ??            \{\par ??                Response.Redirect(Request.QueryString[\cf7 "ReturnUrl"\cf0 ]);\par ??            \}\par ??            \cf4 else\par ??\cf0                 Response.Redirect(TargetUrl);\par ??        \}\par ??    \}\par ??\par ??    \cf3 // you can just call this method , it will automatically redirect to default page ,\par ??\cf0      \cf4 protected\cf0  \cf4 void\cf0  RedirectFromLoginPage()\par ??     \{\par ??         RedirectFromLoginPage(DefaultPage);\par ??     \}\par ??    \par ??    \cf4 protected\cf0  \cf4 override\cf0  \cf4 void\cf0  OnInit(\cf6 EventArgs\cf0  e)\par ??    \{\par ??        \cf3 // if the user is not logged in  , redirect  to Login Page\par ??\cf0         \cf4 if\cf0  (\cf4 string\cf0 .IsNullOrEmpty(UserName) &amp;amp;&amp;amp; !IsLoginPage)\par ??            RequestLogin();\par ??        \cf3 // this needed to initialize its base page class\par ??\cf0         \cf4 base\cf0 .OnInit(e);\par ??    \}\par ??\}\par ??}
--&gt;    &lt;div style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;     &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; this page will be used as a basePage class for all pages that needs to be secured .&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; so if you want to make some pages secured , &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; just let them inherit from this class instead of directly&amp;nbsp; inheriting from System.Web.UI.Page&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;SecuredPage&lt;/span&gt; : System.Web.UI.&lt;span style="color: rgb(43, 145, 175);"&gt;Page&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; LoginUrl&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"~/Login.aspx"&lt;/span&gt;; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// return true if the current page is the Login Page .&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; IsLoginPage&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;VirtualPathUtility&lt;/span&gt;.GetFileName(Request.Path).ToLower() == &lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;VirtualPathUtility&lt;/span&gt;.GetFileName(LoginUrl.ToLower());&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Property to get/set the UserName from/in the session&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; UserNameKey = &lt;span style="color: rgb(163, 21, 21);"&gt;"UserName"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp; UserName&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Convert&lt;/span&gt;.ToString(Session[UserNameKey]);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session[UserNameKey] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 41&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; DefaultPage&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"Default.aspx"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 48&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; RequestLogin()&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 49&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 50&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; CurrentUrl = Request.RawUrl;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 51&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Redirect(LoginUrl + &lt;span style="color: rgb(163, 21, 21);"&gt;"?ReturnUrl="&lt;/span&gt; + Server.HtmlEncode( CurrentUrl));&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 52&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 53&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 54&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// use this method to redirect the user after sucessfull login , &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 55&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// this method will make sure that the user will get redirected to the original url&amp;nbsp; that was on .&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 56&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 57&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; RedirectFromLoginPage(&lt;span style="color: blue;"&gt;string&lt;/span&gt; TargetUrl)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 58&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 59&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (! &lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(UserName))&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 60&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 61&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"ReturnUrl"&lt;/span&gt;] != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 62&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 63&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Redirect(Request.QueryString[&lt;span style="color: rgb(163, 21, 21);"&gt;"ReturnUrl"&lt;/span&gt;]);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 64&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 65&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 66&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Redirect(TargetUrl);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 67&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 68&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 69&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 70&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// you can just call this method , it will automatically redirect to default page ,&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 71&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; RedirectFromLoginPage()&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 72&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 73&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RedirectFromLoginPage(DefaultPage);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 74&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 75&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 76&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnInit(&lt;span style="color: rgb(43, 145, 175);"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 77&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 78&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// if the user is not logged in&amp;nbsp; , redirect&amp;nbsp; to Login Page&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 79&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(UserName) &amp;amp;&amp;amp; !IsLoginPage)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 80&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RequestLogin();&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 81&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// this needed to initialize its base page class&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 82&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnInit(e);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 83&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 84&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;To Use the above class, change your pages to inherit from it, then in the login page , you can handle the Authenticate event for your login control&amp;nbsp; like this :&lt;/p&gt;

&lt;div style="overflow: auto;"&gt;
  &lt;p&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1256\uc1 \deff0{\fonttbl{\f0\fnil\fcharset178\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red0\green128\blue0;\red163\green21\blue21;}??\fs20     \cf3 protected\cf0  \cf3 void\cf0  Login1_Authenticate(\cf3 object\cf0  sender, \cf4 AuthenticateEventArgs\cf0  e)\par ??    \{\par ??        \cf3 bool\cf0  Authenticated = \cf3 true\cf0 ;\par ??        Authenticated = ValidateLogin(Login1.UserName, Login1.Password);\par ??        \cf3 if\cf0  (Authenticated)\par ??        \{\par ??            e.Authenticated = Authenticated;\par ??            \cf5 // store the user name in the session\par ??\cf0             UserName = Login1.UserName;\par ??            \cf5 // use this method instead of directly calling response.redirect ,\par ??\cf0             \cf5 // because this method will remember the previous page that the user requested ,\par ??\par ??\cf0             RedirectFromLoginPage();\par ??        \}\par ??    \}\par ??\par ??    \cf3 private\cf0  \cf3 bool\cf0  ValidateLogin(\cf3 string\cf0  UserName, \cf3 string\cf0  Password)\par ??    \{\par ??        \cf5 // here you need to check the entered user and pasword ,\par ??\cf0         \cf5 //you may need to check the users table in the database ..\par ??\cf0         \cf5 //Authenticated= UserBLL.ValidateUser(Login1.UserName, Login1.Password);\par ??\cf0         \cf5 // for this  , demo lets just use User:admin and password:admin\par ??\par ??\cf0         \cf5 // again , instead of this code , you must validate your users based on database or else.\par ??\cf0         \cf3 return\cf0  UserName == \cf6 "admin"\cf0  &amp;amp;&amp;amp; Password == \cf6 "admin"\cf0 ;\par ??    \}}
--&gt;&lt;/p&gt;

  &lt;div style="background: white none repeat scroll 0% 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Login1_Authenticate(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(43, 145, 175);"&gt;AuthenticateEventArgs&lt;/span&gt; e)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; Authenticated = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Authenticated = ValidateLogin(Login1.UserName, Login1.Password);&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Authenticated)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// store the user name in the session&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UserName = Login1.UserName;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// use this method instead of directly calling response.redirect ,&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// because this method will remember the previous page that the user requested ,&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RedirectFromLoginPage();&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 33&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; ValidateLogin(&lt;span style="color: blue;"&gt;string&lt;/span&gt; UserName, &lt;span style="color: blue;"&gt;string&lt;/span&gt; Password)&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// here you need to check the entered user and pasword ,&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//you may need to check the users table in the database ..&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Authenticated= UserBLL.ValidateUser(Login1.UserName, Login1.Password);&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// for this&amp;nbsp; , demo lets just use User:admin and password:admin&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 40&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// again , instead of this code , you must validate your users based on database or else.&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; UserName == &lt;span style="color: rgb(163, 21, 21);"&gt;"admin"&lt;/span&gt; &amp;amp;&amp;amp; Password == &lt;span style="color: rgb(163, 21, 21);"&gt;"admin"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&amp;nbsp;&amp;nbsp; 43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Note: RedirectFromLoginPage() method will make sure to send the user back to the page that he/she was on .&lt;/p&gt;

&lt;p&gt;I created a demo website that will show you how to use the SecuredPage class in your website , you can download the demo [&lt;a href="http://weblogs.asp.net/blogs/anasghanem/BlogPosts/SecurityUsingSession.zip" mce_href="http://weblogs.asp.net/blogs/anasghanem/BlogPosts/SecurityUsingSession.zip"&gt;&lt;b&gt;here&lt;/b&gt;&lt;/a&gt;].&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Hope it helps.&lt;/p&gt;

&lt;p&gt;Anas Ghanem&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6725189" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Session/default.aspx">Session</category></item><item><title>Avoid session loss when using Cookieless sessions with XML Sitemap Provider</title><link>http://weblogs.asp.net/anasghanem/archive/2008/10/30/avoid-session-loss-when-using-cookieless-sessions-with-xml-sitemap-provider.aspx</link><pubDate>Thu, 30 Oct 2008 08:10:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6710281</guid><dc:creator>anas</dc:creator><slash:comments>0</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/10/30/avoid-session-loss-when-using-cookieless-sessions-with-xml-sitemap-provider.aspx#comments</comments><description>&lt;p&gt;In march 2008 , &lt;a href="http://weblogs.asp.net/anasghanem/archive/2008/03/08/tip-trick-preventing-session-loss-when-using-cookieless-sessions-with-treeview-and-menu-controls.aspx" mce_href="http://weblogs.asp.net/anasghanem/archive/2008/03/08/tip-trick-preventing-session-loss-when-using-cookieless-sessions-with-treeview-and-menu-controls.aspx"&gt;I&amp;nbsp; showed how to avoid losing session&lt;/a&gt; when using cookiless sessions with XmlSiteMapPorvider. I mentioned how to quickly fix this issue&amp;nbsp; by handling the Data Bound events of Navigation controls . Since This issue is still reproducible in .Net 3.5 ,I published an article that discusses this issue in more details , Read the article.&lt;a href="http://www.codeproject.com/KB/session/AvoidSessionLosXMLSitemap.aspx" mce_href="http://www.codeproject.com/KB/session/AvoidSessionLosXMLSitemap.aspx"&gt;[Here]&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6710281" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Session/default.aspx">Session</category></item><item><title>Avoid using the Session in The Page Constructor OR in Page Local Variables </title><link>http://weblogs.asp.net/anasghanem/archive/2008/05/07/avoid-using-the-session-in-the-page-constructor.aspx</link><pubDate>Wed, 07 May 2008 21:50:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6166924</guid><dc:creator>anas</dc:creator><slash:comments>9</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/05/07/avoid-using-the-session-in-the-page-constructor.aspx#comments</comments><description>&lt;p&gt;While I'm helping the Folks on asp.net forums, I noticed that there is a lot of develoeprs trying to access the Http Session in Page Constructor !&lt;/p&gt;
&lt;p&gt;Most of them used this to Implement a kind of Secured Base Page&amp;nbsp; that checks the session value ,and if its missing , it will redirect to login or whatever page,&lt;/p&gt;
&lt;p&gt;some of them write this Class :&lt;/p&gt;
&lt;div style="width: 100%; background-color: rgb(238, 238, 238);"&gt;
&lt;p&gt;public class AdminSecuredPage : System.Web.UI.Page&lt;br&gt;{&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public AdminSecuredPage()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Session["AdminUser"] == null) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Redirect("~/login.aspx");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Note that the above class will throws HttpException , &lt;/p&gt;
&lt;p&gt;which tells :&lt;br&gt;&lt;/p&gt;
&lt;p&gt;"&lt;i&gt;&lt;u&gt;S&lt;/u&gt;&lt;u&gt;ession state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive. Please also make sure that System.Web.SessionStateModule or a custom session state module is included in the &amp;lt;configuration&amp;gt; ...&lt;/u&gt;&lt;/i&gt;"&lt;br&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;well the above exception will be thrown because the session is not ready when the Page constructor was called .&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;The Solution :&amp;nbsp;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;One solution is to Move the Code from Page Constructor to&amp;nbsp; Page_init , Note that the page_init for this class will be called before the the Page_init of its Sub Page Class,&lt;/p&gt;
&lt;p&gt;so you can check the Session value as follows:&lt;/p&gt;
&lt;div style="width: 100%; background-color: rgb(238, 238, 238);"&gt;
&lt;p&gt;public class AdminSecuredPage : System.Web.UI.Page&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public AdminSecuredPage()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {}&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void OnInit(EventArgs e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if the user is not Admin , redirect to Login Page&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Session["AdminUser"] == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Redirect("~/login.aspx");&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // this needed to initialize its base page class &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.OnInit(e);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;} &lt;/p&gt;&lt;/div&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p mce_keep="true"&gt;&lt;b&gt;Edit 1:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;Note that using the session for that purpose is not a good practice , because there is al ready a built in &lt;a href="http://msdn.microsoft.com/en-us/library/aa480476.aspx" class="" mce_href="http://msdn.microsoft.com/en-us/library/aa480476.aspx"&gt;FormsAuthentication&lt;/a&gt; services for asp.net,&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;however , i will not discuss the security approches here...&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Edit 2:&lt;/p&gt;&lt;p&gt;I want to mention that you should also avoid accessing the Session in the Page Local Variables , like this example ( look at the Bold word)&lt;br&gt;&lt;/p&gt;&lt;p&gt;Partial Class Page1&lt;/p&gt;&lt;p&gt;Inherits System.Web.UI.Page&lt;/p&gt;
&lt;p mce_keep="true"&gt;&amp;nbsp;Private LocalVar as string=&lt;b&gt;Session("MyVar")&lt;/b&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;&lt;br&gt;that will also throw the HttpException  !&lt;/p&gt;&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hope It Helps,&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Anas Ghanem&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6166924" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Session/default.aspx">Session</category></item><item><title>Tip/ Trick: Preventing Session Loss when using Cookieless sessions with  TreeView and Menu controls</title><link>http://weblogs.asp.net/anasghanem/archive/2008/03/08/tip-trick-preventing-session-loss-when-using-cookieless-sessions-with-treeview-and-menu-controls.aspx</link><pubDate>Sat, 08 Mar 2008 21:16:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5939756</guid><dc:creator>anas</dc:creator><slash:comments>6</slash:comments><comments>http://weblogs.asp.net/anasghanem/archive/2008/03/08/tip-trick-preventing-session-loss-when-using-cookieless-sessions-with-treeview-and-menu-controls.aspx#comments</comments><description>
&lt;p&gt;By default .net runtime uses the cookies to remember the session Id between the requests ,&lt;br __designer:dtid="16607045100765187"&gt;but when using Cookie less sessions ,the runtime inserts the Session Id to the requested url &amp;nbsp;,&lt;br __designer:dtid="16607045100765188"&gt;this way the runtime can remember the session id and prevent the session loss .&lt;br __designer:dtid="16607045100765189"&gt;&lt;br __designer:dtid="16607045100765190"&gt;The problem is , when using the Menu and TreeView Controls , these controls doesn't handle this issue ,&lt;br __designer:dtid="16607045100765191"&gt;so when those controls display there data from the Site maps, they didn't append the session id to the Navigation Urls of there Items ,&lt;br __designer:dtid="16607045100765192"&gt;and so when the User Navigate to a page using those controls , he will redirected to a Url that didn't contains the session Id,&lt;br __designer:dtid="16607045100765193"&gt;and so the runtime can't extract the session id , Hence the session will be &amp;nbsp;lost .&lt;br __designer:dtid="16607045100765194"&gt;&lt;br __designer:dtid="16607045100765195"&gt;&lt;b&gt;The Solution:&lt;/b&gt;&lt;br __designer:dtid="16607045100765196"&gt;the solution&amp;nbsp; is to Manually Append the Session Id to NavigateUrl &amp;nbsp;of the Items for those Navigation controls,&lt;br __designer:dtid="16607045100765197"&gt;we can use &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httpresponse.applyapppathmodifier%28VS.71%29.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.web.httpresponse.applyapppathmodifier(VS.71).aspx"&gt;HttpContext.Current.Response.ApplyAppPathModifier&lt;/a&gt; to modify the Item Urls as Follows:&lt;br __designer:dtid="16607045100765198"&gt;&lt;br __designer:dtid="16607045100765199"&gt;For the Menu Control , we can use MenuItemDataBound Event Handler to accomplish this:&lt;/p&gt;
&lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:00fec3bb-5f7c-47ff-a057-9c9bc6fca1e6" class="wlWriterEditableSmartContent"&gt;
&lt;pre style="overflow: auto; background-color: White;"&gt;&lt;div&gt;&lt;!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Menu1_MenuItemDataBound(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; sender, MenuEventArgs e)
 {
   &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; appened the SessionId to Menu Item URL to Avoid sessin loss&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;
&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;   e.Item.NavigateUrl &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; HttpContext.Current.Response.ApplyAppPathModifier(e.Item.NavigateUrl);
 }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;For the TreeView Control, we can use TreeNodeDataBound&amp;nbsp; to accomplish this&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:ac075d79-52ef-4bad-ace8-6a8b043b65dd" class="wlWriterEditableSmartContent"&gt;&lt;pre style="overflow: auto; background-color: White;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; TreeView1_TreeNodeDataBound(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; sender, TreeNodeEventArgs e)
  {
    e.Node.NavigateUrl &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; HttpContext.Current.Response.ApplyAppPathModifier(e.Node.NavigateUrl);
  }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Regards, 
&lt;/p&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5939756" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/anasghanem/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Session/default.aspx">Session</category><category domain="http://weblogs.asp.net/anasghanem/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category></item></channel></rss>