目录

■问题起因

方式1:cookie

●cookie保存位置

●cookie文件的形式

●cookie的内容 (时代在发展)

方式2:session

■cookie・session

■查看cookie   !!!(常用)

方式3:token

■其他总结

1. 为什么要有session的出现?

2. session生成方式?

3. 为什么会有token的出现?

4. token的生成方式?

5. token和session的区别?



■问题起因

=====

外部系统连接SFDC,获取SFDC侧的数据_sun0322-CSDN博客

9.客户端与服务器端的认证方式

=====

https://blog.csdn.net/qq_31201781/article/details/94575507

=====

最基本的方式,使用密码直接登录,这里就不说了

方式1:cookie

第一次访问的服务Web A生成一个sessionid并且存入cookie中。
第二次访问的是服务Web A,客户端会在cookie中读取sessionid加入到请求头中。

服务器端:
//s是一个stringbuilder变量  context
context.Response.Cookies.Add(new HttpCookie("CheckCode",s.ToString().ToLower()));客户端:
function GetCookie(cookieName){var cookies=document.cookie.split(";");for(var i=0;i<cookies.length;i++){var cookie=cookies[i].split("=");if(cookieName==cookie[0]){return cookie[1];}}return null;}

●cookie保存位置

・win10 IE

C:\Users\userName\AppData\Local\Microsoft\Windows\INetCache

・win10 Microsoft Edge

C:\Users\userName\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\#!001\MicrosoftEdge

关于文件夹的显示还要设定(有两个设定)让其显示

・隠しフィル、隠しフォルダー、および隠しドライブを表示する。

・保護されたオペレーティングシステムファイルを表示しない。(推奨)

         隐藏受保护的系统文件  // 日文系统此选项在最下面

显示之后,看到的缓存文件夹,cookie文件夹,但是没有找到cookie文件。。。

↓参照

更改Edge浏览器缓存位置_任逍遊 --- [专用空间]-CSDN博客_edge浏览器缓存文件夹

・chrome

C:\Users\userName\AppData\Local\Google\Chrome\User Data\Default\Cache

看不出来那个是cookie文件。。。

在这里面

C:\Users\userName\AppData\Local\Google\Chrome\User Data\Default

Cookies实际上是一个sqlite数据库文件,可以直接打开查看:

各个网站的cookie信息都在这里

↓参照

Chrome的Cookie的存放位置及查看方法 - 程序员大本营

Cookie的解密参考这篇文章: https://www.cnblogs.com/lrysjtu/p/4713250.html

●cookie文件的形式

【Cookie:userName@csdn.net/】

●cookie的内容 (时代在发展)

Cookies are no longer stored in files.  Please use Internet*Cookie* APIs to access cookies.

打开cookie文件之后之后,显示如上内容。

告诉我们现在cookies不再保存在本地文件中,你需要通过http 相关的api才能查看cookies信息

↓参照

HTTP协议基础-8-HTTP cookies_Anthony_tester的博客-CSDN博客

方式2:session

session :一直不变,客户端服务器端都有保存

确认上一次的请求是不是你发送的

(每一个session都有一个sessionId,生成的sessionId以Cookie的形式发送给客户端,

浏览器下次再访问服务器端时,会带着cookie中的sessionId一起发送过去。)

■cookie・session

session 从字面上讲,就是会话。这个就类似于你和一个人交谈,
你怎么知道当前和你交谈的是张三而不是李四呢?
对方肯定有某种特征(长相等)表明他就是张三。session 也是类似的道理,服务器要知道当前发请求给自己的是谁。
为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,
然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,
服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,
可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。服务器使用session把用户的信息临时保存在了服务器上,
用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,
可是session有一个缺陷:如果web服务器做了负载均衡,
那么下一个操作请求到了另一台服务器的时候session会丢失。

■查看cookie   !!!(常用)

在浏览器地址栏输入javascript:alert (document. cookie)

复制下面内容到浏览器地址栏,然后把1删掉。

1javascript:alert (document. cookie)

// ↑ 要在【当前打开的窗口】中输入,才有效

//    【当前打开的窗口】是指你所打开的Web页面, 新启动一个Tab页无效!!!

// ↑ 直接复制的时候,冒号前面的内容会丢失 复制【javascript.alert (document. cookie)】把 "点" 改成 "冒号"

扩展,查看浏览器内核信息

1javascript:alert (navigator. userAgent)

方式3:token

・token:根据算法,只是在某一个时间段内是不变的,服务器端不需要保存,每次通过计算得出的结果来验证

(token不需要cookie,它是一个值,可以直接再客户端以文本的形式保存起来,

在服务器端,也无需占用任何空间保存,因为Token是通过加密算法计算处理的一个值)

// token是服务器端利用加密算法,计算处理的一个值

// 再加密算法中,有可能会使用到客户端的机器信息,当前的时间等

---------------------

// 本次SFDC连接中发现,很短的时间内(也就5分钟不到)

//  两次执程序,进行连接处理,取得Token,取得的Token的值竟然是相同的。

// 推测,SFDC侧,生成Token的算法,是和时间段有关系。

---------------------

本次的SFDC类子中,就是保存了第一次建立连接后,得到的Token的值,

当再次发起请求时,把token值也发送过去,

服务器端会再次使用加密算法,再次进行计算,

看看从客户端得到的Token值,和再次计算出来的Token值,是否匹配。)

使用 「curl -I URL  (这里的「I」要大写)获取Header信息,查看cookie中设定的sessionID

通过以上这种方式取得的值,每次都是不同的

而,我们的浏览器,可以记住登陆状态,是我们浏览器端保存了,sessionID,每次sessionID都是相同的

■其他总结

1. 为什么要有session的出现?

答:是由于网络中http协议造成的,因为http本身是无状态协议,这样,无法确定你的本次请求和上次请求是不是你发送的。如果要进行类似论坛登陆相关的操作,就实现不了了。

2. session生成方式?

答:浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session生成一个唯一的会话的key,也就是sessionid,然后,将sessionid及对应的session分别作为key和value保存到缓存中,也可以持久化到数据库中,然后服务器再把sessionid,以cookie的形式发送给客户端。这样浏览器下次再访问时,会直接带着cookie中的sessionid。然后服务器根据sessionid找到对应的session进行匹配;
还有一种是浏览器禁用了cookie或不支持cookie,这种可以通过URL重写的方式发到服务器;

简单来讲,用户访问的时候说他自己是张三,他骗你怎么办? 那就在服务器端保存张三的信息,给他一个id,让他下次用id访问。

3. 为什么会有token的出现?

答:首先,session的存储是需要空间的,其次,session的传递一般都是通过cookie来传递的,或者url重写的方式;而token在服务器是可以不需要存储用户的信息的,而token的传递方式也不限于cookie传递,当然,token也是可以保存起来的;

4. token的生成方式?

答:浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的HMAC-SHA256算法,然后加一个密钥,生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端;客户端将token保存起来,下次请求时,带着token,服务器收到请求后,然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息;

5. token和session的区别?

token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;
session服务器会保存一份,可能保存到缓存,文件,数据库;同样,session和token都是有过期时间一说,都需要去管理过期时间;
其实token与session的问题是一种时间与空间的博弈问题,session是空间换时间,而token是时间换空间。两者的选择要看具体情况而定。

虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,也就是说,后端不需要记录什么东西,每次一个无状态请求,每次解密验证,每次当场得出合法 /非法的结论。这一切判断依据,除了固化在 CS 两端的一些逻辑之外,整个信息是自包含的。这才是真正的无状态。 
而 sessionid ,一般都是一段随机字符串,需要到后端去检索 id 的有效性。万一服务器重启导致内存里的 session 没了呢?万一 redis 服务器挂了呢?

方案 A (session):我发给你一张身份证,但只是一张写着身份证号码的纸片。你每次来办事,我去后台查一下你的 id 是不是有效。 
方案 B(token) :我发给你一张加密的身份证,以后你只要出示这张卡片,我就知道你一定是自己人。 
就这么个差别。

----

客户端与服务器端的认证方式(cookie,token,session)相关推荐

  1. python客户端修改session_Python接口自动化之cookie、session应用

    介绍了post源码,data.json参数应用场景及实战. 以下介绍cookie.session原理及在接口自动化中的应用. HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个 ...

  2. 程序员过关斩将--更加优雅的Token认证方式JWT

    点击上方"蓝字"带你去看小星星 菜菜,上次你讲的cookie和session认证方式,我这次面试果然遇到了 结果怎么样? 结果面试官问我还有没有更好的方式? 看来你又挂了 别说了, ...

  3. java token生成和验证_程序员应该如何设计更优雅的Token认证方式?

    基于Token的认证 通过上一篇你大体已经了解session和cookie认证了,session认证需要服务端做大量的工作来保证session信息的一致性以及session的存储,所以现代的web应用 ...

  4. Java 实现 SSH 协议的客户端登录认证方式

    摘自:http://blog.sae.sina.com.cn/archives/333/comment-page-1#comment-37391 简介: 本文首先对 SSH 协议的基础知识作以介绍,然 ...

  5. Java 实现 SSH 协议的客户端登录认证方式--转载

    背景 在开篇之前,让我们先对 SSH 协议有个宏观的大致了解,这样更有利于我们对本文的加深了解.首先要提到的就是计算机网络协议,所谓计算机网络协议,简单的说就是定义了一套标准和规则,使得不同计算机之间 ...

  6. spring-security-学习笔记-02-基于Session的认证方式

    spring-security-学习笔记-02-基于Session的认证方式 文章目录 spring-security-学习笔记-02-基于Session的认证方式 2 基于Session的认证方式 ...

  7. 鉴权必须了解的 5 个兄弟:cookie、session、token、jwt、单点登录

    本文你将看到: 基于 HTTP 的前端鉴权背景 cookie 为什么是最方便的存储方案,有哪些操作 cookie 的方式 session 方案是如何实现的,存在哪些问题 token 方案是如何实现的, ...

  8. 前端鉴权必须了解的 5 个兄弟:cookie、session、token、jwt、单点登录

    编辑:前端妹 | 来源:HenryLulu_几木 链接:juejin.cn/post/6898630134530752520 本文你将看到: 基于 HTTP 的前端鉴权背景 cookie 为什么是最方 ...

  9. 做web开发,怎么能不懂cookie、session和token呢?

    如果把人体比作一个web系统的话,cookie.session和token就好像人体的经络和血管一样,而web系统中的数据,就好像人体的血液一样.血液依靠着血管在人体内流动,就如数据根据cookie和 ...

最新文章

  1. 【11平台天梯】【原理分析】11平台天梯原理分析
  2. Db4o结合Linq、Lambda表达式的简单示例
  3. rtsp 测试地址_TranServer:简单实现浏览器播放RTSP流
  4. 错误:未在本地计算机上注册“Microsoft.Ace.OleDb.12.0”提供程序
  5. win7文件和文件夹可以重名吗_Win7下如何重命名,替换System32文件夹下的系统文件...
  6. python网络安全协议_python网络安全
  7. 修改WebBrowser控件的内核解决方案
  8. 如何把catia完全卸载干净_catia软件无法卸载怎么办?彻底删除catia等三维软件的方法...
  9. Rocket - tilelink - AtomicAutomata
  10. oracle存储过程实例
  11. 软件工程实验报告一软件开发准备及Visio应用
  12. Windows PE(WinPE)
  13. 一句话解释新西兰技术移民
  14. css 间隙,CSS间隙属性
  15. 关闭colorbox刷新页面
  16. nc文件处理学习资料
  17. Cursor——ChatGPT的替代品【笔记】
  18. python停止线程_python线程之八:线程停止的3种方式,5个实例
  19. Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap
  20. 有什么JAVA 网站或者论坛资料丰富呢

热门文章

  1. java怎么给文档加水印_Java 如何给Word文档添加多行文字水印
  2. 深入探讨PageRank(二):PageRank原理剖析
  3. 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
  4. Android adb “push pull”中文支持解决方案
  5. Java生产者 消费者模型的一种实现
  6. Redis和MySQL的结合方案
  7. java在线聊天项目0.6版 解决客户端关闭后异常问题 dis.readUTF()循环读取已关闭的socket...
  8. STM32的JTAG下载模式
  9. 在vmware server中部署linux redhat 5.4 ORACLE RAC11g +ASM
  10. Linux脚本学习随记