会话跟踪Cookie与Session

本文探讨了HTTP协议的无状态特性以及会话跟踪的重要性。介绍了Cookie和Session的工作原理、应用场景、注意事项,以及它们之间的区别,强调了在实际开发中选择合适会话管理方式的考虑因素。
摘要由CSDN通过智能技术生成

为什么需要“会话跟踪”

无状态的HTTP协议

HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。

通俗的说,打电话的过程就是一个会话的过程。会话跟踪则是为了记录通话内容所需要的录音笔。

    

会话的生命周期:

会话开启:打开浏览器(相当于拨通电话)
会话结束:关闭浏览器(相当于挂断电话)

会话范围:

会话开启  => 会话结束

(会话一旦开启,只要不关闭会话,中间的通话都是会话数据)

会话的分类:

Cookie: 会话数据存储在浏览器端
Session:会话数据存储在服务器端
 

Cookie

工作原理

1.服务器将需要会话跟踪的信息制成一段文本信息,将文本储存在浏览器(本地磁盘或者内存)上。

2.文本信息中储存的是某个一级域名(百度,谷歌等)的信息( HTTP头信息,有效期等)。

3.当浏览器中存在百度Cookie的场合,访问百度时,将百度的Cookie信息传递给服务器

4.服务器通过Cookie获取会话跟踪的数据。

实际应用:

1.浏览器中“记住密码”和“恢复关闭网页”的功能,就是将储存在本地磁盘中的硬盘式Cookie的信息跟踪到浏览器上。

2.浏览器中“返回上一个画面”的功能,就是将储存在内存中的内存Cookie的信息跟踪到浏览器上。

使用Cookie的注意事项

修改和删除cookie

Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,覆盖原来的Cookie

注意:修改、删除Cookie时,新建的CookievalueMaxAge之外的所有属性,例如namepathdomain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。

设置cookie的安全属性

HTTP协议是不安全的,虽然在创建会话跟踪之后Cookie无法修改和删除,但是在创建之前是可以修改的。如果不希望CookieHTTP等非安全协议中传输,可以设置Cookiesecure属性为true。浏览器只会在HTTPSSSL等安全协议中传输此类Cookie

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

Session

工作原理

1.服务器会向客户浏览器发送一个每个会话特有的会话编号session id,让它进入到cookie里。

2.服务器同时也把session id和对应的会话信息以MAP的形式记录在服务器上,这些记录就是session列表

3.客户端浏览器再次访问时,会发送cookie给服务器,其中就包含session id

4.服务器从cookie里找到session id,再根据session id找到会话跟踪的数据

实际应用:

为以下应用提供数据来源。

1.根据短时视频用户的喜好推荐相关视频。

2.打车软件的热力图。

3.在手机附近说一些话题,推送相关消息,

使用Session的注意事项

Session的生命周期和有效期设置

如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。

为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。

Session的超时时间为maxInactiveInterval属性, TomcatSession的默认超时时间为20分钟

可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(int seconds)修改。

Session的超时时间也可以在web.xml中修改。例如修改为60分钟:

<session-config>

   <session-timeout>60</session-timeout>      <!-- 单位:分钟 -->

</session-config>

注意: <session-timeout>参数的单位为分钟,而setMaxInactiveInterval(int seconds)单位为秒。

CookieSession区别

1、对象不同

cookie:是针对每个网站的信息,每个网站只能对应一个,其他网站无法访问,这个文件保存在客户端。每次访问网站,浏览器都会查找该网站的 cookies,如果有,则会将该文件发送给客户端。cookies文件的内容大致上包括了诸如用户名、密码、设置等信息。

session:是针对每个用户的,只有客户端才能访问,程序为该客户添加一个 sessionsession中主要保存用户的登录信息、操作信息等等。此 session将在用户访问结束后自动消失(如果也是超时)

2、存储数据大小不同

cookie一个 cookie存储的数据不超过3K

sessionsession存储在服务器上可以任意存储数据。当 session存储数据太多时,服务器可选择进行清理。

3、生命周期不同

cookiecookie的生命周期当浏览器关闭的时候就消亡了,cookie的生命周期是累计的,从创建时就开始计时,超过设定的时间后cookie生命周期结束。

sessionsession的生命周期是间隔的,从创建时开始计时如在设定时间内没有访问session,那么session生命周期就被销毁。

4、存储位置不同

cookiecookie数据保存在客户端。

sessionsession数据保存在服务器端。

5、数据类型不同

两者都是key-value结构,但针对value的类型是有差异的。

cookievalue只能是字符串类型。

sessionvalueobject类型。

6、安全性不同

cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session

Cookie通过在客户端记录信息确定用户身份

Session通过在服务器端记录信息确定用户身份

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值