session共享的问题,请教各位!!!!!!

illhan98 2014-08-13 05:06:55
同一服务器,但是有好几个域名指向这个服务器,工程是JAVA开发的,网站有时候访问的是aaaaa.com这个域名,当访问到这个域名的时候,点击页面上的某个按钮跳转用到了bbbb.com这个域名,访问aaaaa.com是一个session,但是跳转到bbbb.com的时候session就变了,怎么实现这两个个域名下session共享,服务器都是同一个,只是域名不一样,目前用的笨办法是将session信息写入一文件,感觉这种方法不太好,有没有简单点的,请教大家
...全文
481 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_19657489 2014-08-17
  • 打赏
  • 举报
回复
用context吧这个比session好用
illhan98 2014-08-15
  • 打赏
  • 举报
回复
引用 21 楼 arkwrightzhn 的回复:
[quote=引用 17 楼 illhan98 的回复:] [quote=引用 11 楼 arkwrightzhn 的回复:] [quote=引用 10 楼 arkwrightzhn 的回复:] [quote=引用 9 楼 arkwrightzhn 的回复:] 楼主的问题不是session共享的问题,而是cookie跨域问题,之所以出现两个session,是因为aaa.com下的cookie不能在访问bbb.com时带上,所以server认为是一个新的session。 解决的办法如上面有人提到,试试在页面上写上javascript代码:
document.domain=aaa.com;
这样就不区分是哪个域名了,都是aaa.com。理论上是这样,但我没试过,不知道好使不好使。 另外的终极解决方案就是放弃用cookie来记录sessionid,而是用urlrewrite方式。只不过这样的改动会比较大,整个工程中的url输出都要做urlrewrite处理。
domain上要加引号:
document.domain="aaa.com";
如果两个域名是同一个主域名的二级域名,比如aaa.xxx.com和bbb.xxx.com,document.domain="xxx.com";应该可以,如果是aaa.com和bbb.com就不知道行不行了[/quote] 跨域问题需要在Safari浏览器上测试下,Safari浏览器对跨域安全做得特别死,一般会不允许通过。 看下我的博客,里面有urlrewrite的方法,但是那是自动判断cookie是否被禁用,应该不适合你这种,你应该使用不自动判断的那种,而是全rewrite,调用response.encodeURL(String) http://blog.csdn.net/norriszhang/article/details/20380023[/quote] 感谢回答,跳转的时候都是使用response.sendRedirect(response.encodeRedirectURL(url)); 同一个WEB容器,不同域名,应该可以通过session id的到session的吧[/quote] 不可以,cookie是按域名分开存储的,比如aaa.com下写进一个cookie叫jsessionid,当你访问bbb.com时,这个cookie不会被携带,所以bbb.com对应的server(与aaa.com指向的是同一个server)拿不到这个jsessionid。 另外,为什么是encodeRedirectURL?应该是encodeURL方法呀。[/quote] 我的意思是说,访问bbb.com带一个session id的参数,这个id是访问aaa.com产生的,然后服务器通过这个session id去取出session这样也不行么,encodeRedirectURL跟encodeURL有啥区别么
传说中的大神 2014-08-15
  • 打赏
  • 举报
回复
Ie7 or ie 8 share session
Norris_Zhang 2014-08-15
  • 打赏
  • 举报
回复
引用 24 楼 illhan98 的回复:
[quote=引用 21 楼 arkwrightzhn 的回复:] [quote=引用 17 楼 illhan98 的回复:] [quote=引用 11 楼 arkwrightzhn 的回复:] [quote=引用 10 楼 arkwrightzhn 的回复:] [quote=引用 9 楼 arkwrightzhn 的回复:] 楼主的问题不是session共享的问题,而是...
感谢回答,...[/quote] 不可以...[/quote] 我的意思是说,访问bbb.com带一个session id的参数,这个id是访问aaa.com产生的,然后服务器通过这个session id去取出session这样也不行么,encodeRedirectURL跟encodeURL有啥区别么[/quote] 1. 带session id的参数,你是指带上http://bbb.com/?sessionid=xxxxxx这样带上参数?那如果这样,容器不会给你找sessionid=xxxxxx的session,你只能自己去找,等于你自己实现一遍session的机制,你用的也不是HttpSession。 用encodeURL方法生成的url你可以看下,大概是这样的形式:http://bbb.com;jsessionid=xxxxxx?param1=value1¶m2=value2。这是只有java ee规范认识的一种形式,用;引出jsessionid,你要这样拼出来也行,容器是认识的,但是你要是跟param1=value1一样拼上,容器是不认识的。 2. encodeRedirectURL我没用过,你找下API,看下跟encodeURL有什么区别。
illhan98 2014-08-14
  • 打赏
  • 举报
回复
引用 19 楼 ygycomon 的回复:
告诉过你了cookie不能跨域 你在qq.com登录了,难道jd.com也能收到你的cookie和sessionid? 自己看一下cookie里记录session那个域就很清晰了啊
好的,谢谢
大齐zy 2014-08-14
  • 打赏
  • 举报
回复
引用 14 楼 illhan98 的回复:
[quote=引用 8 楼 xiamizy 的回复:] 如果web服务器是一个,那就没必要用session共享了,将两个域名绑定到一个ip地址和端口上 感觉楼主是分别起了两个web服务器,那可以使用apache nigix haproxy 这样的工具来做代理。 必须要保证出去的是一个ip和端口才行。
两个域名是绑定到一个IP跟端口上的[/quote] 那应该都是一个session啊,web容器都是一样的,怎么会是两个呢
致知Fighting 2014-08-14
  • 打赏
  • 举报
回复
告诉过你了cookie不能跨域 你在qq.com登录了,难道jd.com也能收到你的cookie和sessionid? 自己看一下cookie里记录session那个域就很清晰了啊
大齐zy 2014-08-14
  • 打赏
  • 举报
回复
引用 16 楼 illhan98 的回复:
[quote=引用 15 楼 xiamizy 的回复:] [quote=引用 14 楼 illhan98 的回复:] [quote=引用 8 楼 xiamizy 的回复:] 如果web服务器是一个,那就没必要用session共享了,将两个域名绑定到一个ip地址和端口上 感觉楼主是分别起了两个web服务器,那可以使用apache nigix haproxy 这样的工具来做代理。 必须要保证出去的是一个ip和端口才行。
两个域名是绑定到一个IP跟端口上的[/quote] 那应该都是一个session啊,web容器都是一样的,怎么会是两个呢[/quote] 开始我也觉得应该是一个,但是公司一个工程师告诉我不一样,所以才提问的[/quote] 抓个包验证下,看看session id 一不一样
illhan98 2014-08-14
  • 打赏
  • 举报
回复
引用 11 楼 arkwrightzhn 的回复:
[quote=引用 10 楼 arkwrightzhn 的回复:] [quote=引用 9 楼 arkwrightzhn 的回复:] 楼主的问题不是session共享的问题,而是cookie跨域问题,之所以出现两个session,是因为aaa.com下的cookie不能在访问bbb.com时带上,所以server认为是一个新的session。 解决的办法如上面有人提到,试试在页面上写上javascript代码:
document.domain=aaa.com;
这样就不区分是哪个域名了,都是aaa.com。理论上是这样,但我没试过,不知道好使不好使。 另外的终极解决方案就是放弃用cookie来记录sessionid,而是用urlrewrite方式。只不过这样的改动会比较大,整个工程中的url输出都要做urlrewrite处理。
domain上要加引号:
document.domain="aaa.com";
如果两个域名是同一个主域名的二级域名,比如aaa.xxx.com和bbb.xxx.com,document.domain="xxx.com";应该可以,如果是aaa.com和bbb.com就不知道行不行了[/quote] 跨域问题需要在Safari浏览器上测试下,Safari浏览器对跨域安全做得特别死,一般会不允许通过。 看下我的博客,里面有urlrewrite的方法,但是那是自动判断cookie是否被禁用,应该不适合你这种,你应该使用不自动判断的那种,而是全rewrite,调用response.encodeURL(String) http://blog.csdn.net/norriszhang/article/details/20380023[/quote] 感谢回答,跳转的时候都是使用response.sendRedirect(response.encodeRedirectURL(url)); 同一个WEB容器,不同域名,应该可以通过session id的到session的吧
illhan98 2014-08-14
  • 打赏
  • 举报
回复
引用 15 楼 xiamizy 的回复:
[quote=引用 14 楼 illhan98 的回复:] [quote=引用 8 楼 xiamizy 的回复:] 如果web服务器是一个,那就没必要用session共享了,将两个域名绑定到一个ip地址和端口上 感觉楼主是分别起了两个web服务器,那可以使用apache nigix haproxy 这样的工具来做代理。 必须要保证出去的是一个ip和端口才行。
两个域名是绑定到一个IP跟端口上的[/quote] 那应该都是一个session啊,web容器都是一样的,怎么会是两个呢[/quote] 开始我也觉得应该是一个,但是公司一个工程师告诉我不一样,所以才提问的
Wanted__杰 2014-08-14
  • 打赏
  • 举报
回复
jmppok 2014-08-14
  • 打赏
  • 举报
回复
Norris_Zhang 2014-08-14
  • 打赏
  • 举报
回复
引用 17 楼 illhan98 的回复:
[quote=引用 11 楼 arkwrightzhn 的回复:] [quote=引用 10 楼 arkwrightzhn 的回复:] [quote=引用 9 楼 arkwrightzhn 的回复:] 楼主的问题不是session共享的问题,而是cookie跨域问题,之所以出现两个session,是因为aaa.com下的cookie不能在访问bbb.com时带上,所以server认为是一个新的session。 解决的办法如上面有人提到,试试在页面上写上javascript代码:
document.domain=aaa.com;
这样就不区分是哪个域名了,都是aaa.com。理论上是这样,但我没试过,不知道好使不好使。 另外的终极解决方案就是放弃用cookie来记录sessionid,而是用urlrewrite方式。只不过这样的改动会比较大,整个工程中的url输出都要做urlrewrite处理。
domain上要加引号:
document.domain="aaa.com";
如果两个域名是同一个主域名的二级域名,比如aaa.xxx.com和bbb.xxx.com,document.domain="xxx.com";应该可以,如果是aaa.com和bbb.com就不知道行不行了[/quote] 跨域问题需要在Safari浏览器上测试下,Safari浏览器对跨域安全做得特别死,一般会不允许通过。 看下我的博客,里面有urlrewrite的方法,但是那是自动判断cookie是否被禁用,应该不适合你这种,你应该使用不自动判断的那种,而是全rewrite,调用response.encodeURL(String) http://blog.csdn.net/norriszhang/article/details/20380023[/quote] 感谢回答,跳转的时候都是使用response.sendRedirect(response.encodeRedirectURL(url)); 同一个WEB容器,不同域名,应该可以通过session id的到session的吧[/quote] 不可以,cookie是按域名分开存储的,比如aaa.com下写进一个cookie叫jsessionid,当你访问bbb.com时,这个cookie不会被携带,所以bbb.com对应的server(与aaa.com指向的是同一个server)拿不到这个jsessionid。 另外,为什么是encodeRedirectURL?应该是encodeURL方法呀。
illhan98 2014-08-13
  • 打赏
  • 举报
回复
引用 8 楼 xiamizy 的回复:
如果web服务器是一个,那就没必要用session共享了,将两个域名绑定到一个ip地址和端口上 感觉楼主是分别起了两个web服务器,那可以使用apache nigix haproxy 这样的工具来做代理。 必须要保证出去的是一个ip和端口才行。
两个域名是绑定到一个IP跟端口上的
illhan98 2014-08-13
  • 打赏
  • 举报
回复
引用 7 楼 ygycomon 的回复:
[quote=引用 6 楼 illhan98 的回复:] [quote=引用 5 楼 ygycomon 的回复:] [quote=引用 2 楼 illhan98 的回复:] [quote=引用 1 楼 ygycomon 的回复:] 放到一个共享的地方啊,譬如内存啊,数据库啊,缓存服务器啊
谢谢,是可以但是第二次访问的时候怎么判断呢,是同一个session[/quote] 如果是共享父域名的话可以自己搞个cookie,如果不是的话,就比较麻烦了,需要通过其他的方式获取这个id[/quote] 我觉得可以啊,访问第一个的时候保存session id啊,跳转到下一页面的时候,通过session id的值是可以取出服务器上的session的啊,因为都是用的同一个服务器啊[/quote] cookie不能跨域,跨域的话要用其他的方案[/quote] 一个WEB应用服务器,不同的域名,一个WEB应用服务器,SESSION ID是唯一的吧
illhan98 2014-08-13
  • 打赏
  • 举报
回复
引用 8 楼 xiamizy 的回复:
如果web服务器是一个,那就没必要用session共享了,将两个域名绑定到一个ip地址和端口上 感觉楼主是分别起了两个web服务器,那可以使用apache nigix haproxy 这样的工具来做代理。 必须要保证出去的是一个ip和端口才行。
引用 8 楼 xiamizy 的回复:
如果web服务器是一个,那就没必要用session共享了,将两个域名绑定到一个ip地址和端口上 感觉楼主是分别起了两个web服务器,那可以使用apache nigix haproxy 这样的工具来做代理。 必须要保证出去的是一个ip和端口才行。
大哥我都重复好多次啦,一个WEB服务器,域名不一样而已,我觉得SESSION共享没有没有必要做,一个服务器里面,通过SESSION ID应该就可以访问到SESSION,我会做做测试的
Norris_Zhang 2014-08-13
  • 打赏
  • 举报
回复
引用 10 楼 arkwrightzhn 的回复:
[quote=引用 9 楼 arkwrightzhn 的回复:] 楼主的问题不是session共享的问题,而是cookie跨域问题,之所以出现两个session,是因为aaa.com下的cookie不能在访问bbb.com时带上,所以server认为是一个新的session。 解决的办法如上面有人提到,试试在页面上写上javascript代码:
document.domain=aaa.com;
这样就不区分是哪个域名了,都是aaa.com。理论上是这样,但我没试过,不知道好使不好使。 另外的终极解决方案就是放弃用cookie来记录sessionid,而是用urlrewrite方式。只不过这样的改动会比较大,整个工程中的url输出都要做urlrewrite处理。
domain上要加引号:
document.domain="aaa.com";
如果两个域名是同一个主域名的二级域名,比如aaa.xxx.com和bbb.xxx.com,document.domain="xxx.com";应该可以,如果是aaa.com和bbb.com就不知道行不行了[/quote] 跨域问题需要在Safari浏览器上测试下,Safari浏览器对跨域安全做得特别死,一般会不允许通过。 看下我的博客,里面有urlrewrite的方法,但是那是自动判断cookie是否被禁用,应该不适合你这种,你应该使用不自动判断的那种,而是全rewrite,调用response.encodeURL(String) http://blog.csdn.net/norriszhang/article/details/20380023
Norris_Zhang 2014-08-13
  • 打赏
  • 举报
回复
引用 9 楼 arkwrightzhn 的回复:
楼主的问题不是session共享的问题,而是cookie跨域问题,之所以出现两个session,是因为aaa.com下的cookie不能在访问bbb.com时带上,所以server认为是一个新的session。 解决的办法如上面有人提到,试试在页面上写上javascript代码:
document.domain=aaa.com;
这样就不区分是哪个域名了,都是aaa.com。理论上是这样,但我没试过,不知道好使不好使。 另外的终极解决方案就是放弃用cookie来记录sessionid,而是用urlrewrite方式。只不过这样的改动会比较大,整个工程中的url输出都要做urlrewrite处理。
domain上要加引号:
document.domain="aaa.com";
如果两个域名是同一个主域名的二级域名,比如aaa.xxx.com和bbb.xxx.com,document.domain="xxx.com";应该可以,如果是aaa.com和bbb.com就不知道行不行了
Norris_Zhang 2014-08-13
  • 打赏
  • 举报
回复
楼主的问题不是session共享的问题,而是cookie跨域问题,之所以出现两个session,是因为aaa.com下的cookie不能在访问bbb.com时带上,所以server认为是一个新的session。 解决的办法如上面有人提到,试试在页面上写上javascript代码:
document.domain=aaa.com;
这样就不区分是哪个域名了,都是aaa.com。理论上是这样,但我没试过,不知道好使不好使。 另外的终极解决方案就是放弃用cookie来记录sessionid,而是用urlrewrite方式。只不过这样的改动会比较大,整个工程中的url输出都要做urlrewrite处理。
大齐zy 2014-08-13
  • 打赏
  • 举报
回复
如果web服务器是一个,那就没必要用session共享了,将两个域名绑定到一个ip地址和端口上 感觉楼主是分别起了两个web服务器,那可以使用apache nigix haproxy 这样的工具来做代理。 必须要保证出去的是一个ip和端口才行。
加载更多回复(7)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧