Session Grails项目中不同子域的相同会话和会话ID-我如何做到这一点?
我目前正在从事一个支持多种语言的项目。为了便于搜索引擎优化,我正在尝试重定向用户与其区域设置(或首选语言)相对应的子域 也就是说,我的项目的url是mydomain.com,我与子域en.mydomain.com、es.mydomain.com、de.mydomain.com、fr.mydomain.com一起工作。。。你明白了。目前,所有子域都由同一个grails应用程序提供服务 发生的情况是,我的grails项目为每个子域维护不同的会话(如会话ID所示),因此当用户在语言之间切换时,信息丢失。我没有料到( 如何显式设置会话标识符?我希望它仅基于mydomain.com 我得到了ApacheTomcat提供类似Session Grails项目中不同子域的相同会话和会话ID-我如何做到这一点?,session,grails,subdomain,Session,Grails,Subdomain,我目前正在从事一个支持多种语言的项目。为了便于搜索引擎优化,我正在尝试重定向用户与其区域设置(或首选语言)相对应的子域 也就是说,我的项目的url是mydomain.com,我与子域en.mydomain.com、es.mydomain.com、de.mydomain.com、fr.mydomain.com一起工作。。。你明白了。目前,所有子域都由同一个grails应用程序提供服务 发生的情况是,我的grails项目为每个子域维护不同的会话(如会话ID所示),因此当用户在语言之间切换时,信息丢失
<Context sessionCookiePath="/" sessionCookieDomain=".mydomain.com">
,但这对devel环境等没有帮助
有什么提示吗?您是否尝试过将会话信息存储在数据库中?这有时用于负载平衡,在这里也可能有所帮助
非常感谢您的帮助(一如既往)!干杯!我认为您无法在不同的上下文根之间共享会话,更不用说子域了。 对于负载平衡,大多数配置使用粘性会话,其中相同的会话请求被定向到相同的应用服务器。有一些配置在负载平衡器下跨集群复制会话,以便为后续请求启用切换服务器 您在这里有几个选项:
解决这个问题的一种方法是,在tomcat面前使用nginx作为反向代理,并将请求从
fr.mydomain.com
转换为localhost/yourapplication/fr/
或其他内容
他会关心你的饼干的。我附加了一个示例配置(略为缩短),我曾经使用过:
server {
server_name fr.yourdomain.com;
location /office {
proxy_pass http://localhost:8080/yourapplication/fr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
server {
server_name es.yourdomain.com;
location /office {
proxy_pass http://localhost:8080/yourapplication/es;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
[..]
实际上,选项2是我想要探索的。这就是为什么我建议SessionOkieDomain作为一个可能的解决方案。但是,我不知道如何为grails-devel(不在tomcat中运行)做到这一点?!非常感谢您的回答。顺便说一句,cookies非常简单,您不需要apache或其他规则。浏览器处理cookie处理,JavaScript可以在客户端处理cookie。在服务器端,您得到了标签:,甚至还有一个cookie插件:)。您可以使用:request.cookies.each{println”${it.name}==${it.value}----和set----def c=new Cookie(someName,someValue)c.maxAge=someNumberInSeconds response.addCookie(c)