java Web:4、session 与 cookie分析?客户端禁止 cookie ,能实现 session 还能用吗?

session 和 cookie 有什么区别?

首先,什么是会话?用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。

cookie和session都是用来保存会话过程中产生的数据的。

1、session概念以及工作原理

Session是由服务器应用维持的一个服务器端的存储空间。
用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来指向服务器端的Session存储空间。
SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一般情况下,一旦客户端禁用Cookie,那么Session也会失效。

2、cookie概念以及工作原理

Cookie是在HTTP下,服务器或脚本可以维护客户工作站上信息的一种方式。
Cookie不会占服务器资源,是存在客户端内存或者一个Cookie的文本文件中。
我们一般认为Cookie是不可靠的,Cookies是保存在本机客户端上的,但是其信息的完全可见性并且易于本地编辑性,往往可以引起很多的安全问题。

3、两者的区别?

不同类型cookiesession
存放位置数据存放在客户浏览器数据存放在服务器上
安全性安全性较差,因为存放在客户端,很容易被其他人得到因为存放在服务器端,所以安全性较好
性能方面性能高一些因为存放在服务器上,访问量增多时,会降低服务器性能
数据量单个cookie保存的数据不能超过4kb,很多浏览器限制一个站点最多保存20个cookiesession不存在这个问题

鉴于以上几点区别,一般,我们将用户登录信息等重要信息存放在session中,而其他需要保留的信息存在cookie中。

如果客户端禁止 cookie ,能实现 session 还能用吗?

一般情况下,在会话中,服务器存储的session是通过sessionid存储在cookie中,来存储在客户端的。所以,如果浏览器禁用了cookie,客户端请求没办法传递sessionid,服务器无法识别用户身份,会导致session失效。

但是,我们可以通过其他方法,在禁用cookie的情况下,实现session的使用。方法如下:

重写url

把 sessionid 作为参数追加的原 url 中,后续的浏览器与服务器交互中携带 sessionid 参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值