热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

cookiesessiontoken总结

cookiesessiontoken总结发展史一、cookie1.cookie简介2.cookie特点2.1由浏览器来管理2.2不可跨域名2.3中文需要编码2.4可保存二进制图片2




COOKIE session token总结


    • 发展史
    • 一、COOKIE
      • 1.COOKIE简介
      • 2.COOKIE特点
          • 2.1 由浏览器来管理
          • 2.2 不可跨域名
          • 2.3 中文需要编码
          • 2.4 可保存二进制图片
          • 2.5 读取COOKIE


      • 3. COOKIE常用属性
          • 3.1 maxAge 有效期
          • 3.2 secure 安全属性



    • 二、session
      • 1.session简介
      • 2.session生命周期
      • 3.常用属性
          • 3.1 maxInactiveInterval 超时时间


      • 4.需要浏览器客户端的支持
          • 4.1 COOKIE中存储JSESSIONID
          • 4.2 默认maxAge属性一般为–1


      • 5. 浏览器不支持时,URL地址重写
          • 5.1 实现
          • 5.2 注意
          • 5.3 Session中禁止使用COOKIE
            • 方式一:修改web项目中的配置
            • 方式二: 修改tomcat中的配置




    • 三、token
      • 3.1 token简介

    • 四、COOKIE session token问题及解决方案
      • 4.1 COOKIE
      • 4.2 session
      • 4.3 token
      • 参考链接



发展史


  • 背景
    HTTP协议是无状态的协议。这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。

    为了使某个域名下的所有网页能够共享某些数据,session和COOKIE出现了。


一、COOKIE


1.COOKIE简介

COOKIE是存在客户端的一小段信息,用来记录用户状态。


  1. 客户端请求服务器,
  2. 服务器响应,需要记录该用户状态,就使用response发送一个响应到客户端,这个响应头,其中就包含Set-COOKIE头部。如下
  3. 浏览器保存COOKIE,发起的第二次请求时,浏览器会自动在请求头中添加COOKIE
  4. 服务器检查该COOKIE,以此来辨认用户状态

响应头:

Set-COOKIE: value[; expires=date][; domain=domain][; path=path][; secure]

2.COOKIE特点


2.1 由浏览器来管理

如果浏览器不支持COOKIE(如大部分手机中的浏览器)或者把COOKIE禁用了,COOKIE功能就会失效。

不同的浏览器采用不同的方式保存COOKIE。

IE浏览器会在“C:\Documents and Settings\你的用户名\COOKIEs”文件夹下以文本文件形式保存,一个文本文件保存一个COOKIE。


2.2 不可跨域名

根据COOKIE规范,浏览器能够保证Google只会操作Google的COOKIE而不会操作Baidu的COOKIE,从而保证用户的隐私安全


2.3 中文需要编码

中文属于Unicode字符,英文属于ASCII字符
COOKIE中保存中文只能编码。一般使用UTF-8编码即可。不推荐使用GBK等中文编码,因为浏览器不一定支持,而且Javascript也不支持GBK编码


2.4 可保存二进制图片

需要使用BASE64编码

并不实用。由于浏览器每次请求服务器都会携带COOKIE,因此COOKIE内容不宜过多,否则影响速度。COOKIE的内容应该少而精。


2.5 读取COOKIE

浏览器提交COOKIE时只会提交name与value属性。其他属性如maxAge属性只被浏览器用来判断COOKIE是否过期


3. COOKIE常用属性

Java中把COOKIE封装成了javax.servlet.http.COOKIE类。每个COOKIE都是该COOKIE类的对象。服务器通过操作COOKIE类对象对客户端COOKIE进行操作。

通过request.getCOOKIE()获取客户端提交的所有COOKIE(以COOKIE[]数组形式返回),通过response.addCOOKIE(COOKIECOOKIE)向客户端设置COOKIE
在这里插入图片描述


3.1 maxAge 有效期

-1(默认值):


  • 临时性COOKIE,不会被持久化,不会被写到COOKIE文件中
  • 仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该COOKIE即失效

0: 删除该COOKIE
COOKIE机制没有提供删除COOKIE的方法,因此通过设置该COOKIE即时失效实现删除COOKIE的效果

正数:


  • COOKIE会在maxAge秒之后自动失效
  • 浏览器会持久化,即写到对应的COOKIE文件中

3.2 secure 安全属性

secure属性并不能对COOKIE内容加密,因而不能保证绝对的安全性。如果需要高安全性,需要在程序中对COOKIE内容加密、解密,以防泄密。


二、session


1.session简介

Session是服务器端使用的一种记录客户端状态的机制


2.session生命周期

2.1 在用户第一次访问服务器的时候自动创建,一般把Session放在内存里
2.2 只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session
2.3 服务器会把长时间内没有活跃的Session从内存删除


3.常用属性

Session对应的类为javax.servlet.http.HttpSession类


3.1 maxInactiveInterval 超时时间

  • setMaxInactiveInterval(int seconds)修改超时时间
  • Tomcat中Session的默认超时时间为20分钟

修改web.xml改变Session的默认超时时间。例如修改为60分钟:

60


4.需要浏览器客户端的支持


4.1 COOKIE中存储JSESSIONID

HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的COOKIE,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该COOKIE来识别是否为同一用户。


4.2 默认maxAge属性一般为–1

该COOKIE为服务器自动生成的,它的maxAge属性一般为–1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效


5. 浏览器不支持时,URL地址重写

URL地址重写是对客户端不支持COOKIE的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。


5.1 实现

HttpServletResponse类提供了encodeURL(Stringurl)实现URL地址重写,该方法会自动判断客户端是否支持COOKIE。如果客户端支持COOKIE,会将URL原封不动地输出来。如果客户端不支持COOKIE,则会将用户Session的id重写到URL中如:

response.encodeURL("index.jsp?c=1&wd=Java")
如果是重定向的
response.sendRedirect(response.encodeRedirectURL(“administrator.jsp”));

重新后


对于WAP程序,


5.2 注意

  • WAP程序
    由于大部分的手机浏览器都不支持COOKIE,WAP程序都会采用URL地址重写来跟踪用户会话。

  • tomcat

TOMCAT判断客户端浏览器是否支持COOKIE的依据是请求中是否含有COOKIE。尽管客户端可能会支持COOKIE,但是由于第一次请求时不会携带任何COOKIE(因为并无任何COOKIE可以携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入COOKIE了,因此URL地址重写后的地址中就不会带有jsessionid了。


5.3 Session中禁止使用COOKIE

既然WAP上大部分的客户浏览器都不支持COOKIE,索性禁止Session使用COOKIE,统一使用URL地址重写会更好一些。Java Web规范支持通过配置的方式禁用COOKIE


方式一:修改web项目中的配置

META-INF文件夹(跟WEB-INF文件夹同级,如果没有则创建)
打开context.xml(如果没有则创建),编辑内容如下:





方式二: 修改tomcat中的配置

conf/context.xml





注意:该配置只是禁止Session使用COOKIE作为识别标志,并不能阻止其他的COOKIE读写。也就是说服务器不会自动维护名为JSESSIONID的COOKIE了,但是程序中仍然可以读写其他的COOKIE。


三、token


3.1 token简介

token 也称作令牌,由uid+time+sign[+固定参数]


  • uid: 用户唯一身份标识
  • time: 当前时间的时间戳
  • sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
  • 固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库

四、COOKIE session token问题及解决方案


4.1 COOKIE


  • 浏览器对单个COOKIE保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个COOKIE
  • 有的客户端不支持COOKIE,需要手动设置,比如小程序
  • 浏览器对COOKIE有限制,不能手动设置COOKIE,对于混合嵌套的开发有问题,比如小程序跳转H5页面,不能携带COOKIE
  • CSRF(跨站请求伪造)攻击,这个也好解决,很多框架都屏蔽这个问题

4.2 session


  • 过多的session存在服务器中,对服务器造成压力
  • 不能完全达到负载均衡效果

负载均衡多服务器的情况,不好确认当前用户是否登录,因为多服务器不共享seesion。这个问题也可以将session存在一个服务器中来解决,但是就不能完全达到负载均衡的效果。


4.3 token

可以放在header、url中,在每次网络访问都携带,一般是写请求头header中。

token相比于COOKIE就是有COOKIE的功能,没有COOKIE的限制。比如其他客户端不会限制header的COOKIE。token是COOKIE很好替代品。


参考链接


  • https://blog.csdn.net/fangaoxin/article/details/6952954


推荐阅读
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • Maven Web项目创建时JSP文件常见错误及解决方案
    Maven Web项目创建时JSP文件常见错误及解决方案 ... [详细]
  • CSS3 @font-face 字体应用技术解析与实践
    在Web前端开发中,HTML教程和CSS3的结合使得网页设计更加多样化。长期以来,Web设计师受限于“web-safe”字体的选择。然而,CSS3中的`@font-face`规则允许从服务器端加载自定义字体,极大地丰富了网页的视觉效果。通过这一技术,设计师可以自由选择和使用各种字体,提升用户体验和页面美观度。本文将深入解析`@font-face`的实现原理,并提供实际应用案例,帮助开发者更好地掌握这一强大工具。 ... [详细]
  • 在日常的项目开发中,测试环境和生产环境通常采用HTTP协议访问服务。然而,从浏览器的角度来看,这种访问方式会被标记为不安全。为了提升安全性,当前大多数生产环境已经转向了HTTPS协议。本文将详细介绍如何在Spring Boot应用中配置SSL证书,以实现HTTPS安全访问。通过这一过程,不仅可以增强数据传输的安全性,还能提高用户对系统的信任度。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
author-avatar
我只当你的千纸鹤
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有