web-cookie和session

本文详细介绍了两种常见的会话跟踪技术:cookie与session的工作原理、存储方式及安全性等内容。包括cookie的生成、存储限制与自动登录的应用场景,以及session的创建过程、存储位置和生命周期管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两种会话跟踪技术

cookie

由服务端生成,并发送给浏览器,由浏览器将cookie保存到本地文件内。一般在浏览器的”Internet选项->浏览历史记录->设置->查看文件”路径下保存。
cookie文件的名字一般是user@domain,内容都是经过加密的,需要经过CGI程序处理。

cookie中存储的信息,可以被所有的当前域名下的页面共享!But,cookie是有目录限制的,根目录设置的cookie可以在所有的目录下进行访问然而子目录中设置的cookie父目录中并不能访问。这种cookie被称为会话cookie.其一般不保存在硬盘上.而是保存在内存中.

如果cookie不设定时间的话就表视它的生命周期为浏览器会话的期间,只要关闭浏览器,cookie就消失了。
如果设置了cokie的过期时间.那么浏览器会把cookie保存到硬盘中,再次打IE时会依然有效.直到超过设置的有效期
$.cookie(key, value, {path:”/”, expire: new Date(“2017-01-01”)}) 设置过期时间.
注:存储在硬盘中的cookie可以在不同IE间共享

对于保存在内存里的cookie,不同的浏览器有不同的处理方式

name
value
path: 指定与cookie关联的页面。
domain:指定关联的服务器或域
域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的
secure: 指定cookie的值如何通过网络在用户和web服务器之间传递。
缺省情况下,这个属性为空,默认使用http传递数据。如果被标记为”secure”,则使用HTTPS传递数据。
expire:一般cookie生成时就会被指定一个expire的值,也就是生存时间、过期时间。在这个周期内cookie是有效的,超过这个周期cookie就会被清除。 cookie可以让浏览器记住访问者的特定信息,如上次访问的位置、花费的时间等。

应用
自动登录,即登录某个站点之后,在有效时间内打开这个站点可以不再输入账号密码而自动登录。
cookie实际利用了网页代码中的http头部信息进行传递。
浏览器打开一个页面时,服务器会将cookie伴随着网页数据传回到浏览器,浏览器会根据相关设置考虑是否保存cookie。
包含了一些敏感信息,虽然信息经过加密,
但是如果被别人截获,
那么只要把cookie向服务器提交,那么就可以冒充其他人访问服务器。
所以一般不要使用自动保存密码等功能。

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

session

session 则是服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,

session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session
id将被在本次响应中返回给客户端保存。

原理
当程序需要为某个客户端的请求创建一个session时,
服务器首先检查这个客户端的请求里是否已包含一个session id。
如果有则表明已经为此客户端创建过session,服务器就按照这个session id查找出服务器端保存的session(查找失败的话,会创建一个新的session)。

如果请求中不包含session id,则就回创建一个新的session,并把session id返回到客户端进行保存。

只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。

session_id存储方式
客户端浏览器可以通过cookie保存session id,但是cookie可以被浏览器禁止。

还有一种url重写的技术,就是把session id直接附加在URL路径的后面。

还有一种表单隐藏字段技术,就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

session存储方式
数据库
在数据库里设置一张session表,字段包括:
user_id, session, version, flag
其中session字段存储JSON编码的会话数据.
其中version和flag用于实现版本号乐观锁,保证会话读写的数据完整性.

文件
如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path=”N;/save_path”,N 为分级的级数,save_path 为开始目录。 当写入 SESSION 数据的时候,PHP 会获取到客户端的 SESSION_ID,然后根据这个 SESSION ID 到指定的 SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件

安全
session id一旦被攻击者而已获得,攻击者可以伪装成请求者对服务器发起请求。

session数据存放在服务器上。一般把登陆信息用session保存。 session会在一定时间内保存在服务器上,当访问增多时,会占用服务器的性能

生命周期
1.服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。
2.调用Session的invalidate方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值