There are various captive portal software packages available (both free and open source) that will allow you to setup an internet access facility that people have to logon to first. None of the packages I tried did what I wanted and they were not particularly customisable. Therefore I created my own, using a few iptables rules and PHP (along with a handful of other standard packages). This page details the steps that were taken. The key to this method as opposed to other iptables based solutions is that tracking information is removed after the user has signed up. Failure to do this will sometimes cause the user to still be redirected to your logon page even after they have signed up.
Captive portals allow for a splash screen to be delivered to a user upon entering an open network such as free wifi hotspots at various establishments. This portal typically shows terms of service and displays some branding. The user hits OK and then they’re free to use the network. I find this burdensome but in the world of branding and advertising I can understand why places may want this. I found the above iptables only solution with some PHP interesting. Here’s another site.
For Squid users it appears to be even easier by only requiring some configuration changes. See Portal Splash Pages for more information.