In this chapter, we investigated the various ways in which we can authenticate a user in your web applications. After stressing the importance of planning, we looked at some solutions that our various web servers provide for us, in addition to some of their drawbacks (specifically the lack of tight integration into our system).
We then looked at implementing your authentication system and built on the cookies and sessions technologies we learned about in the previous chapter. With this, we started to see some object-oriented implementation in our application and built a UserManager object with which to manage login attempts.
In the next chapter, we spend time looking at working with strings and the formatting of data types. We then look at a technology called output buffering, which we can use to avoid the stress of having to worry about stray blank lines and characters interfering with our setcookie and header function calls.