大家都知道,比如我们登录一个OA网站,看到的数据和同事的是有不同的,简单一想,是因为我们的登录账户不同,但是技术上是怎么实现的呢?
尤其是login后,我们访问的都是同一个URL,为什么页面上展示的数据会不同呢?
技术初探
最近小编亲自编写了一个web应用,终于略懂一二,和大家分享。
- 后台会根据请求所关联的用户去过滤数据
用户在浏览器中输入URL,后台根据URL匹配处理他的视图,返回属于该用户的数据。
为什么在浏览器中输入URL,后台程序能知道这次请求所关联的用户是谁?请看下一节,技术细探
技术细探(Cookie/Session机制详解)
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
详情推荐大家阅读:https://www.cnblogs.com/zhouhbing/p/4204132.html
这边提炼几个关键点:
- HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。
- 目前Cookie已经成为标准,所有的主流浏览器都支持Cookie。
- Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交(浏览器每次请求服务器都会携带Cookie)给服务器。服务器检查该Cookie,以此来辨认用户状态。
- 查看某个网站颁发的Cookie很简单。在浏览器地址栏输入javascript:alert (document. cookie),大家可以在百度网页中尝试
- Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
- Session对象是在客户端第一次请求服务器的时候创建的。
- 虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
- 绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。
- URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(Stringurl)实现URL地址重写