就最近一段时间,就遇到了两次session id 一直变化的,所以做个总结。
2016-12-27 13:37
1631 查看
1. 第一种出现是在一个项目里面这里叫A项目,需要嵌入另外一个项目这里叫B项目,通过iframe (IE会出现)
通过iframe引入 B项目 因为B项目里面有登录拦截,所以在A项目里面会请求登录一下,可是只要一请求B项目,就一直停留在请登录
调试后发现每次请求都会产生一个全新的sessionid,所以才会一直出现请重新登录的界面。问题是找到了(ps:只要可以登录,到时候通过iframe就可以引入自己需要的B项目页面了)要怎么解决呢?
百度了以后发现,IE会丢失iframe中的cookie,而session其实就是基于cookie的,客户端在第一次与服务器进行会话时,会分配给客户端sessionid保存在cookie中,然后在后面的请求中,会带上cookie, 现在IE会丢失iframe中的cookie,所以服务器会重新分配给客户端sessionid ,所以会提示一直需要登录
所以只要设置一下p3p就可以了。
P3P(Platform for Privacy Preferences)正是一种可以提供这种个人隐私保护策略,一般浏览器都支持P3P协议。P3P
header允许跨域访问隐私数据,从而可以跨域set-cookie成功
我是在B项目的拦截器里面加了一个p3p协议设定的代码
HttpServletResponse res = (HttpServletResponse) ServletActionContext.getResponse();
res.setHeader("P3P","CP=CAO PSA OUR");
2.第二种是出现在外网访问的地方,第二种出现的情况是基于第一种,就是我们的A项目和B项目本来是在内网部署的,然后需要给领导看,叫网管把我们这两个项目的地址给映射到外网了。登录A项目的时候,一直提示,请重新登录。
一调试,还是一样的问题,sessionid一直在变化,那这个是什么原因呢?
后面百度得知:因为我们的A项目和B项目映射到外网以后是ip一致,然后端口不同而已,这样子会造成session冲突
IP相同认为是 同一个域,接收了B的set-cookie指令,把对应的cookie内容覆盖了,其中包括sessionid,造成A的session丢失。
如果 IP不同,则不会发生这个问题。IP相同的两个session对应的cookie是一样的,而不幸的是sessionID就保存在cookie中,这样先访问A,再访问B的时候,B的sessionid会覆盖A的sessionid。这个事情没办法解决,所以不能弄两个端口,要弄两个外网ip。都是cookie出现的问题,它不会区分端口,造成这多个站点不断的覆盖前面的,从而造成session的丢失
所以在此做了一个总结
通过iframe引入 B项目 因为B项目里面有登录拦截,所以在A项目里面会请求登录一下,可是只要一请求B项目,就一直停留在请登录
调试后发现每次请求都会产生一个全新的sessionid,所以才会一直出现请重新登录的界面。问题是找到了(ps:只要可以登录,到时候通过iframe就可以引入自己需要的B项目页面了)要怎么解决呢?
百度了以后发现,IE会丢失iframe中的cookie,而session其实就是基于cookie的,客户端在第一次与服务器进行会话时,会分配给客户端sessionid保存在cookie中,然后在后面的请求中,会带上cookie, 现在IE会丢失iframe中的cookie,所以服务器会重新分配给客户端sessionid ,所以会提示一直需要登录
所以只要设置一下p3p就可以了。
P3P(Platform for Privacy Preferences)正是一种可以提供这种个人隐私保护策略,一般浏览器都支持P3P协议。P3P
header允许跨域访问隐私数据,从而可以跨域set-cookie成功
我是在B项目的拦截器里面加了一个p3p协议设定的代码
HttpServletResponse res = (HttpServletResponse) ServletActionContext.getResponse();
res.setHeader("P3P","CP=CAO PSA OUR");
2.第二种是出现在外网访问的地方,第二种出现的情况是基于第一种,就是我们的A项目和B项目本来是在内网部署的,然后需要给领导看,叫网管把我们这两个项目的地址给映射到外网了。登录A项目的时候,一直提示,请重新登录。
一调试,还是一样的问题,sessionid一直在变化,那这个是什么原因呢?
后面百度得知:因为我们的A项目和B项目映射到外网以后是ip一致,然后端口不同而已,这样子会造成session冲突
IP相同认为是 同一个域,接收了B的set-cookie指令,把对应的cookie内容覆盖了,其中包括sessionid,造成A的session丢失。
如果 IP不同,则不会发生这个问题。IP相同的两个session对应的cookie是一样的,而不幸的是sessionID就保存在cookie中,这样先访问A,再访问B的时候,B的sessionid会覆盖A的sessionid。这个事情没办法解决,所以不能弄两个端口,要弄两个外网ip。都是cookie出现的问题,它不会区分端口,造成这多个站点不断的覆盖前面的,从而造成session的丢失
所以在此做了一个总结
相关文章推荐
- ASP.NET MVC中sessionID一直变化的解决方法
- 最近一直忙于研究Portal,所以对于JSR170的研究需要后放一段时间
- 最近一直在做C#操作office方面的工作!总结一下!(一)Excel
- 总结一下最近一段时间导出数据到Excel的几种方法
- 对最近一段时间的总结
- 最近配置IBM设备遇到的问题总结
- 最近一直在弄sqlserver的锁的问题,总算搞一段落,现把相关总结如下:
- 最近一段时间的java框架学习总结
- 用Appfabric cache存储asp.net Session遇到的问题及总结
- 最近遇到的笔记本故障及解决办法总结
- 最近一段时间遇到的问题
- 最近一段时间的总结
- 总结一下最近一段时间导出数据到Excel的几种方法
- 由于最近一段时间要在新东方学习英语,所以将停止博客圈更新,请大家见谅,希望大家依旧支持我的博客!
- 总结一下最近将163邮箱拖动效果改成兼容Firefox遇到的问题
- 最近一段时间一直没有更新
- 最近一直在做C#操作office方面的工作!总结一下!Word(二)
- 最近一直在做C#操作office方面的工作!总结一下!(一)Excel
- 对最近一段时间的总结
- 最近用了IE6下的滤镜,遇到的几个问题总结: