HTTP协议是无状态的。它完成的事情只是简单地发送请求到服务器 ,以及从 服务 器获取数据;除此之外一无所知,即使两次请求同一个PHP文件,它也不会认为两次请求之间有任何联系。
由于HTTP协议的无状态,这就使得无法在两个不同的请求之间共享信息,如无法记录“当前访问者”的信息。虽然在登录过程已经验证了用户的用户名与密码是正确的,但是当用户跳转到其他页面时,从登录页面获得的用户信息全部丢失,这是用户不希望发生的。同时,要求用户进入每一个页面时都要输入用户名与密码进行验证又是不现实的,这就要求可以在不同页面之间共享信息。
一般来说,对于PHP以及其他的Web编程语言,可以使用Cookie或者是Session来解决这个问题。
Cookie是保存在客户端的一个小文件,可以将一些需要在页面间共享的资料存储 在这个文件中。但Cookie有3个缺点:一是大小不可以超过4KB(不同的 浏览器 可能限制不同),二是用户可以在浏览器设置中禁用Cookie,三是Cookie是在客户端记录资料安全性较差。
Session一般是通过Cookie来实现的,如果用户禁用了Cookie,Session也同样失效。不同于Cookie的是,Session只是把一个信息的标识通过Cookie放在客户端而实际的信息却存放在服务器上,这样安全性能上有较大的提高。现在也有另外一种不通过Cookie而使用Session的方法,即URL重写技术。这种方法是将Session的标识作为URL的参数与服务进行交互,其好处是不受客户端对Cookie禁用的限制,缺点是使用起来较为麻烦。
在PHP中使用Session非常简单。PHP提供了一个自动全局变量$_SESSION用于处理 Session。但是需要注意的是,如果在PHP的配置文件中没有设置自动启动Session的话,在使用Session之前一定要调用 session_start()函数启动Session。
再次打开login.php,添加以下以粗体显示的代码,以记录用户信息。
不要滥用 Session,Session最大的作用是在页面之间维持状态。许多初学者在掌握Session技术后,很容易将Session作为存储数据的法宝,在 Session里放置很多数据。由于这些数据直到Session过期才会被释放,因此会给服务器带来很大的负担。