删除问题

删除问题

场景:

用户a登录,数据存到了session的user空间内, 

用户b登录,数据存到session的user空间内,

session是服务器的一块空间,不管多少个用户登录,存储的数据都是在这个服务器的session中,

那么这个session中有多个名为(user)的空间,具体防止越权的问题,是根据返回的cookie值来解决的,自己获取的都是自己cookie对应的user空间, 相当于cookie就是这个user空间的钥匙,如果要remove删除时,也是根据cookie删除自己的user空间的数据, 对吧?

session.removeAttribute(user);

2、会不会有这种情况,用户a在登录,存储信息时,用户b的线程进来了,也去存储数据,这时候用户a刚存好,用户b进来,覆盖了用户a的数据,出现了线程不安全的问题, 如果再存储之前,先remove下session,能否解决这个问题?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-06-20 16:41:46

同学你好,1、同学这么理解也可以,在session中会存储多个session,cookie想要获取到session值,是根据sessionID(唯一的)进行获取的。不同的sessionID会获取到不同的session值。

2、1)使用不同的用户进行登陆会创建不同的sessionID,所以用户b并不会覆盖用户a中的数据。

2)不过​session不是线程安全的,如:使用同一个用户进行多线程操作,可能会出现数据的丢失,从而出现线程不安全的问题。同学可以使用ThreadLocal进行解决这个问题。

祝学习愉快!

  • 提问者 rock221 #1

    首先,存入的时候会判断,当前请求是否有cookie,没有没有的话,则会存储到的session的id中,id的空间的名字就是user,然后id空间的要是就是cookie,返回给前端, 对吧。 所以不会出现a用户的信息,存到了b用户的session中。 

    2、使用同一个用户进行多线程操作,可能会出现数据的丢失,从而出现线程不安全的问题。比如呢老师?  

    将session的这个对象set到ThreadLocal中,如果通过get客气取出session对象,然后可以取出session中的user对象,然后修改后ThreadLocal中的数据也会更新。相当于ThreadLocal包括了session,session包括了user。对吧?

    2021-06-20 16:46:23
  • 好帮手慕小尤 回复 提问者 rock221 #2

    同学你好,1、是的,同学理解是正确的。

    2、如以下场景所示:

        将购物车的数据存储到session中,而用户在从商品列表里面选择商品,添加到购物车中有三条数据,然后用户点击查看购物车。再打开另一个页面,继续选择商品。 此时,在显示购物车的页面,有可能运行在一半,但在选择的商品列表页面中又重新进行了加购,从而可能会出现数据丢失或加载时间过长导致请求失败的情况。因session数据是共享的,同时进行请求会出现问题,所以session线程不安全的。 

    3、同学理解是正确的。

    祝学习愉快!

    2021-06-20 19:06:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师