如何解决禁用cookie?

       我们知道session是依赖cookie的,如果用户的浏览器使用了禁用cookie的话,相当于每一次请求会话在服务器端都是一个新的session对象,也就失去了session的意义了,有2种方式可以解决这种问题。第一种的话就是修改浏览器的配置,由于浏览器的版本非常繁多,根据自己使用的浏览器百度如何禁用cookie有很多方案,这里就不做过多赘述了。

      那么接下来说说第2种方案,那就是url的重写,先来说下原理,为什么我们每次请求服务器时,他能将我们的信息记录下来,因为在第一次发送请求时,我们会通过cookie头里的信息发送到服务器,这个时候服务器会创建session对象,并在响应请求的时候会把jseesionid放入到cookie头里面,这样,在我们每次页面的跳转发送请求和接受请求时,都会携带这个jseesionid来进行验证,保证时同一个用户,而如果像前面说的,禁用了cookie的话,那么cookie头时没有任何数据的,那么自然每次访问的时候服务器都会认为是一个新的请求,每次都会新建session对象,这样seesion的数据就没有共享,为了解决这个问题,刚刚说了可以通过url的重写来解决,最简单的方式就是在url的末端加上;注意是分号而不是问号,问号就是请求参数了,然后分号后面加上jsessionid=xxx,这样就相当于模仿cookie发送请求头请求给服务器,这个是最原始的方法,而且实际中也不会这样做,我们可以在用户访问之后通过response对象返回给用户一个url链接,然后在链接里跟上这个jsessionid的值即可,那么现在问题来了,这个jsessionid的值如何获取?

     servlet里面通过请求对象requst对象.getsession.getid()获取到,当然这仅仅只能获取jseesionid的值,而使用Response.encodeURL则可以直接得到路径+jsessionid的全部url路径,不需要自己手动拼接字符串了。然后将这个url返回给客户端,用户通过一个链接点击一样可以解决cookie禁用,但session的数据依旧可以共享的问题。

      一般这个问题都会在面试的时候问到,实际情况中很少有用户会手动禁用cookie的选项。所以如果有问到这个问题,能说出该怎么解决就说明对session的理解有了一个更深刻的认识了

猜你喜欢

转载自blog.csdn.net/u014508939/article/details/78678790