session是运行机制

由于浏览器和WEB服务器是通过http协议进行通信的,http协议是无状态协议,无法保存用户的状态信息,每次发送的请求都会被当做一个独立的请求来看待。为了让服务器可以得到用户的状态信息,session便应运而生。

session保存在服务器端,默认是以文件的形式保存的服务器的文件系统里。通过配置文件是session.save_path可以指定session文件的存储路径。

当然,也可以将session保存到数据库或是memcache之类的内存缓存中。

当浏览器首次访问网站的时候,PHP会为这个请求生产一个唯一的session_id,并将这个session_id保存在服务器上一定的时间,同时将这个session_id通过response给浏览器,浏览器通过cookie将session_id保存在用于电脑的内存里(当然也可以不通过cookie保存session_id)。这样,当浏览器以后的每一次请求都会将这个session_id传递给服务器,由于服务器上保存有次session_id的用户信息,这样,服务器就可以轻而易举的辨识是哪个用户了。

当用户关闭浏览器的时候,cookie里保存的session_id便会被清除,当再次访问服务器的时候需要重新生成和保存session_id。

当用户禁用cookie的时候,我们如何使用session呢?

这个问题也是面试的时候经常会被问到的一个问题。

当浏览器禁用cookie的时候,就无法通过cookie来携带session_id,这样我们只能通过url来传递session_id,之后服务器端程序还得判断这个URL传递过来的session_id在服务器上是否存在或是过期,否则重新生成session保存在页面的每个url连接里。但通过url传递session_id风险系数太高,不推荐使用。

猜你喜欢

转载自blog.csdn.net/csflvcxx/article/details/81076946