了解cookie & session
Web应用程序使用http协议,而这个协议是没有状态的协议。当服务器一旦响应客户的请求之后,就会断开 连接,而同一个客户的下一次请求将重新建立网络连接。服务器应用程序有的时候是需要 判断出请求是否是同一个客户发出的,比如 当购买端口时,有必要跟踪同一个客户发出的一系列请求。
当客户端 (浏览器)和服务器之间交互了多次,那么 就需要将交互所涉及的数据即状态保存下来。而这个状态就是数据。管理指的是多次交互时对数据的修改。
那么 状态管理就有两种模式。即客户端状态管理技术cookie,它负责将状态保存在客户端,即本地。还有一种猜也猜得出,自然是服务器状态管理技术session,它将状态保存在服务器端 。
上面讲得是比较专业,那么通俗一些讲,比较你登录某种教育平台或其他网站,经常会看到“你好,账号XXXXXX”,这种形式。因为这种数据会经常在你切换不同的页面的时出现。还有,当你登录QQ号的时候,你先删除原先的账号,再输入两个你原来账号的开头数字,那接下来它会自动跳出来你的账号。这种数据就是用cookie存放,它是存放在本地浏览器上。所以是比较不安全的,涉及到一些安全问题,密码个人隐私 机密等等,那就用session了,它可以安安全全地放在服务器上。
再深入一点,cooKie是存放在浏览器上,虽然不安全,但是与服务器无关。而session存放在服务器上,当数据量过大,访问量造成一定的压力,但是它安全。
关于cookie的编码方式。
- cookie 只能保存合法的ASCII字符,如果要保存中文,需要 - - - 将中文转换成合法的ASCII字符,即编码 Cookie c = new Cookie("city",URLEncoder.encode("北京","utf-8"));
- cookie生存时间 setMaxAge(n)
- 保存中文 存数据时使用URLEncoder对中文转码
- 取数据时使用URLDecoder对中文解码
- 有效路径 setPath("")
session常用语句
- 销毁数据 session.invalidate();
- 设置数据 session.setAttribute();
- 取数据 session.getAttribute();
- 删数据 session.removeAttribute();
session 超时
- 比如我登录了淘宝,一登录 就会被创建到一个session,如果用了然后空闲三十分钟
- 那么 这个session将会被销毁。 当然可以修改配置文件设置这个时间
- <session-config>
-
<session-timeout> 30 </session-timeout>
- </session-config>
- 缺省的时间通过编程来实现: void session :setMaxInactiveInterval(int seconds)
浏览器禁用了cookie session就不能用了
- 但是可以URL重写的方式来使用 但是仍较烦。当然最好不要禁cookie。
- 例如google浏览器设置里就有cookie禁用选项
session优缺点
- 优点: 安全(将状态保存在服务端),能够保存的数据类型更丰富,而cookie只能保存字串 - session能保存更多的数据,cookie大约保存4k
- 缺点
- session将状态保存在服务端 ,占用了服务器的内存,如果用户量过大,会影响服务器的性能
一花一世界,一木一浮华,一想一下午,一码一整天。