精华内容
下载资源
问答
  • cookie session token

    2021-03-09 11:19:43
    为什么会发明cookie session token? 因为http协议是无状态的,每次客户端访问服务器端,服务器都不知道是谁来访问了它。这在过去也不需要知道是谁,用户向服务器请求想看的页面,服务器响应返回。但是现在交互式...

    为什么会发明cookie session token?

    因为http协议是无状态的,每次客户端访问服务器端,服务器都不知道是谁来访问了它。这在过去也不需要知道是谁,用户向服务器请求想看的页面,服务器响应返回。但是现在交互式网页的产生,使得服务器需要知道是哪个用户访问了,比如购物网站。这时就必须搞清楚谁是谁的问题了。

    Cookie

    (1)什么是cookie?

    Cookie是服务器用来辨认客户端身份的文本信息。由于HTTP是无状态的,也就是服务端并不知道发来请求的客户端是谁。但在某些时候需要知道客户端身份,这时服务器会给客户端颁发一个Cookie。客户端浏览器会将Cookie保存起来,下次向该网站请求时将其附加上,服务器根据其保存的信息确定是哪个客户端。举个例子:比如向某网站申请了账号,自己设置了密码,下次请求时服务器就能分辨出你是哪个用户了,这样就可以实现自动登录。
    在这里插入图片描述
    正如上图所示,客户端向服务器发送请求—>服务器发送响应给客户端,并为其生成Cookie,通过Set-cookie将其贴到用户身上(如图中的识别码34294)---->浏览器将此Cookie保存在浏览器的cookie数据库中,下次再请求时,浏览器根据此请求网站再贴上对应的cookie。注意cookie的内容不一定是识别码,可以是name,phone等,是以键值对的形式存在。
    (2)cookie的内容
    在这里插入图片描述
    在这里插入图片描述
    (3)HttpOnly:是加在cookies上的一个标识,用于告诉浏览器不要向客户端脚本(document.cookie或其他)暴露cookie。当你在cookie上设置HttpOnly标识后,浏览器就会知会到这是特殊的cookie,只能由服务器检索到,所有来自客户端脚本的访问都会被禁止。

    Session

    (1)什么是session?

    客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。所以Session是在服务端。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了
    (2)Session与Cookie的区别
    a) session保存在服务器,这个数据可以保存在集群、数据库、文件中,cookie在浏览器
    b) 虽然session保存在服务器,但是它的正常运行仍然需要客户端浏览器的支持。这是因为session需要使用cookie作为识别标志。HTTP协议是无状态的,session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为SESSIONID的cookie,它的值为该Session的id。Session依据该cookie来识别是否为同一用户。对于不支持cookie的手机浏览器,有另一种解决方案:URL地址重写。URL地址重写的原理是将该用户session的id信息重写到URL地址中,服务器能够解析重写后的URL获取session的id。这样即使客户端不支持cookie,也可以使用session来记录用户状态。

    token

    (1)为什么要发明token?

    因为之前基于session的认证方式存在一定的弊端:

    • 服务器需要存储很多session,进而占用很大内存。
    • 可扩展性问题,如果一台服务器损坏,为不影响用户访问,需要拷贝所有session到另一台服务器。
    • 安全性方面:很容易受到跨站请求伪造(CSRF)的攻击。
    • 跨域资源共享成为问题

    token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

    (2)token的原理
    在这里插入图片描述
    这张图已经说的很清楚了!

    • 用户输入用户名和密码登录,向服务器请求信息
    • 服务端经过校验和认证返回token
    • 客户端存储token,并在下次访问该网站时带上token
    • 服务端采用过滤器校验,校验成功则正确返回响应,不成功则返回错误码

    这个过程不用将用户信息存储在服务器中,并且服务器增减机器都不会影响用户的访问,只要过滤器是一样的就OK。
    (3)token的优点
    安全性,可扩展性,跨域请求
    (4)常用的token认证方案:JWT – JSON WEB TOKEN
    https://www.cnblogs.com/xuxinstyle/p/9675541.html(讲的不错)
    (5)为什么token能抵御CSRF的攻击?
    之前的session是发布给用户一个session-id与服务端的session进行核对。成功则认证成功。token是服务端并不存储对应的token能与之核对,只是有个算法能为用户颁布签名,一个用户去访问服务器,服务器就会知道这是否是自己颁布的签名,如果此时有伪造网站拦截了请求报文,虽然能得到其请求报文,但是里面的token无法伪造(里面有个密钥,只有服务器自己知道)

    展开全文
  • cookie session token总结

    2021-02-26 14:25:02
    cookie session token总结发展史一、cookie1.cookie简介2.cookie特点2.1 由浏览器来管理2.2 不可跨域名2.3 中文需要编码2.4 可保存二进制图片2.5 读取cookie3. cookie常用属性3.1 maxAge 有效期3.2 secure 安全属性...

    发展史

    • 背景
      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分钟:
    
    <session-config>
    
       <session-timeout>60</session-timeout>      <!-- 单位:分钟 -->
    
    </session-config>
    

    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”));
    

    重新后

    <ahref="index.jsp;jsessionid=0CCD096E7F8D97B0BE608AFDC3E1931E?c=
        1&wd=Java">
    

    对于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(如果没有则创建),编辑内容如下:

    <?xml version='1.0' encoding='UTF-8'?>
    
    <Context path="/sessionWeb"cookies="false">
    
    </Context>
    
    方式二: 修改tomcat中的配置

    conf/context.xml

    <!-- The contents of this file will be loaded for eachweb application -->
    
    <Context cookies="false">
    
        <!-- ... 中间代码略 -->
    
    </Context>
    
    

    注意:该配置只是禁止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很好替代品。

    总结

    1、Cookie:保存在客户端,不是很安全;
    2、Session:保存在服务器端,并生成一个Session id保存在客户端。访问过多时会占用服务器的内存和性能;
    3、Token:首次登陆后,服务器生成Token值,保存在数据库中,再将这个Token值返回给客户端,存储在cookie中。增加数据库的存储和查询压力;
    4、JWT(Json Web Token):前后端分离项目中使用。服务端根据算法生成,将返回的结果保存在客户端的localStorage或sessionStorage,客户端每次请求时将JWT放入HTTP Header中的Authorization位(解决XSS和XSRF问题)。消耗服务器的计算压力。

    参考链接

    • https://blog.csdn.net/fangaoxin/article/details/6952954
    • https://www.cnblogs.com/linyuhong/p/9968056.html
    展开全文
  • sso简单原理及实现 SSO 注意:浏览器在访问相同域的时候才会携带Cookie cookie session token的区别 cookie session 区别二 CSRF攻击与防御 token及用token防csrf
    展开全文
  • 了解cookie session token三者 这几天看到一篇关于cookiesessiontoken三者比较非常好的文章,具体的可以点开以下链接 链接: https://www.cnblogs.com/moyand/p/9047978.html#1524954849 这篇文章只说了三者比较...
  • 为什么需要cookie session token 1、http是无状态协议,他不会去记住或者认识是谁正在访问它,对于大型电商平台,需要区分每一个用户才可以把他们需要的东西加入他们的购物车。因此先辈们发明的cookie。 2、当...
  • cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都...
  • 上次老师跟大家分享了Java final关键字的知识,今天跟大家分享下CookieSessionToken的知识。‍1 发展史1、很久很久以前,Web基本上就是文档的浏览而已,既然是浏览,作为服务器,不需要记录谁在某一段时间里都...
  • 浅析cookie session token

    千次阅读 2019-08-28 17:34:10
    概念 cookie:又称为“小甜饼”。类型为“小型文本文件”,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密) ...session token:交互会话中唯一身份标识符 网上...
  • HTTP协议是无状态的,...而CookieSessionToken正是为了解决HTTP协议无状态问题。CookieCookie机制是在客户端实现,采用客户端保持状态的方案。Cookie由服务端生成,发送给客户端(Set-Cookie),客户端请求的时...
  • cookie session token 各是什么鬼? 审稿人:阿伟哥 背景: B/S架构体系,借助Http(s)协议进行网络通信,而Http(s)是无状态协议。为了解决这个问题,就渐渐的引入了上面三个鬼。 cookie: 小豌豆是个程序员,...
  • 这样一来, 我就不保存session id 了, 我只是生成token , 然后验证token , 我用我的CPU计算时间获取了我的session 存储空间 ! 解除了session id这个负担, 可以说是无事一身轻, 我的机器集群现在可以轻松地做...
  • 原文链接:http://www.cnblogs.com/moyand/p/9047978.html发展史1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的...
  • 本文将从Web应用 由传统身份验证到基于Token的身份验证的演变过程的角度,介绍SessionCookieToken。很久以前,Web 应用基本用作文档的浏览,如网络黄页。既然仅仅是浏览,因此服务器不需要记录具体用户在某一段...
  • 发展史CookieSessionTokenToken的起源基于服务器的验证基于服务器验证方式暴露的一些问题基于Token的验证原理Tokens的优势发展史1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要...
  • 浅谈cookie session token

    2020-12-25 17:09:35
    cookie / session /token Cookie的特点和作用 Cookie由服务器生成,发送给浏览器,浏览器把cookie保存,下一次请求同一网站时会把该cookie发送给服务器。 cookie存储数据在客户端浏览器 浏览器对于单个cookie 的...
  • cookie session token 的异同点? 相同点: 1.本质上都是cookie 2.都可以用来判断登陆状态 往前端发送内容 不同点: 1.cookie 直接保存在前端浏览器中,当前端浏览器关闭时,cookie消失,如果设置了保存时间,则到期...
  • 这样一来, 我就不保存session id 了, 我只是生成token , 然后验证token , 我用我的CPU计算时间获取了我的session 存储空间 ! 解除了session id这个负担, 可以说是无事一身轻, 我的机器集群现在可以轻松地做...
  • 这样一来, 我就不保存session id 了, 我只是生成token , 然后验证token , 我用我的CPU计算时间获取了我的session 存储空间 ! 解除了session id这个负担, 可以说是无事一身轻, 我的机器集群现在...
  • 作者:墨颜丶链接:http://www.cnblogs.com/moyand/p/9047978.html发展史1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一...
  • 这样一来, 我就不保存session id 了, 我只是生成token , 然后验证token , 我用我的CPU计算时间获取了我的session 存储空间 ! 解除了session id这个负担, 可以说是无事一身轻, 我的机器集群现在可以...
  • 欢迎关注头条号:Java小野猫一、Cookie介绍1. Cookie是什么cookie机制是采用在客户端保持状态的方案(cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力)。cookie的使用是由浏览器按照一定的原则在后台自动...
  • 这样一来, 我就不保存session id 了, 我只是生成token , 然后验证token , 我用我的CPU计算时间获取了我的session 存储空间 ! 解除了session id这个负担, 可以说是无事一身轻, 我的机器集群现在可以轻松地做...
  • (给100素材网点亮★号,提升开发技能)发展史1、很久很久以前,Web 基本上就是文档的浏览而已,既然是浏览,作为服务器,不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议,就是请求加响应...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,908
精华内容 1,963
热门标签
关键字:

cookiesessiontoken