Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 没有cookie的HttpSession_Grails - Fatal编程技术网

Grails 没有cookie的HttpSession

Grails 没有cookie的HttpSession,grails,Grails,我现在有一个应用程序,由于一系列特殊的原因,它将与托管服务器进行奇怪的交互 应用程序将通过一个更大的门户进行访问,并且可以封装在门户显示中,但是它大量使用了AJAX请求,而这些请求不会被门户截获。这些请求直接发送到托管服务器,但是我发现了一个问题 当发出第一个ajax请求时(进入应用程序流的一小部分),ajax请求没有携带JSessionId cookie(很明显,因为它将此消息发送到的服务器与从中接收到的服务器不同) 是否有一种很好的grails方法可以找到AJAX调用应该与之交互的会话。我已

我现在有一个应用程序,由于一系列特殊的原因,它将与托管服务器进行奇怪的交互

应用程序将通过一个更大的门户进行访问,并且可以封装在门户显示中,但是它大量使用了AJAX请求,而这些请求不会被门户截获。这些请求直接发送到托管服务器,但是我发现了一个问题

当发出第一个ajax请求时(进入应用程序流的一小部分),ajax请求没有携带JSessionId cookie(很明显,因为它将此消息发送到的服务器与从中接收到的服务器不同)


是否有一种很好的grails方法可以找到AJAX调用应该与之交互的会话。我已尝试将grails.views.enable.jsessionid设置为true,但这仅在浏览器不接受cookies时有效。

最可靠的方法是设置自己的“cookie”,并将其与请求一起传递

听起来您好像遇到了由于门户和它的cookies而导致的问题,然后必须在另一台服务器上继续该“会话”。您的应用程序只需自己处理自己的会话,就可以防止被“正常”cookie踩到

其基本思想是在门户向应用程序发出请求时创建一个会话令牌,然后应用程序向其自己的服务器进行的后续AJAX调用应包含该令牌。然后,您可以轻松地将该令牌与需要使用的会话相关联

如果您希望使它更加健壮,并在应用程序级别之上处理它,那么您可以利用Grails是在SpringMVC的基础上构建的这一事实,并覆盖默认会话处理程序,以使用您决定使用的任何机制。我不确定如何使用Grails实现这一点,但我在SpringMVC项目上也做过类似的事情,一旦你了解了框架的各种注入点,这就不难了


这并不理想,因为现在有了相当多的复杂性,但从理论上讲,门户的好处超过了传统“处理”事务所需的额外复杂性,如会话和过期等。

最可靠的方法将是您设置自己的“cookie”,并将其与请求一起传递

听起来您好像遇到了由于门户和它的cookies而导致的问题,然后必须在另一台服务器上继续该“会话”。您的应用程序只需自己处理自己的会话,就可以防止被“正常”cookie踩到

其基本思想是在门户向应用程序发出请求时创建一个会话令牌,然后应用程序向其自己的服务器进行的后续AJAX调用应包含该令牌。然后,您可以轻松地将该令牌与需要使用的会话相关联

如果您希望使它更加健壮,并在应用程序级别之上处理它,那么您可以利用Grails是在SpringMVC的基础上构建的这一事实,并覆盖默认会话处理程序,以使用您决定使用的任何机制。我不确定如何使用Grails实现这一点,但我在SpringMVC项目上也做过类似的事情,一旦你了解了框架的各种注入点,这就不难了


这并不理想,因为现在有了更大的复杂性,但从理论上讲,门户的好处超过了传统“处理”事务(如会话和过期)所需的额外复杂性,等等。

创建一个隐藏表单输入值,该值在第一次请求时发送回门户的页面上包含jsessionid。然后读取该表单变量,并在javascript代码中设置发出AJAX请求的cookie


我猜这已经起作用了,跨站点脚本不是问题吗?浏览器将阻止对主页面来源以外的域的AJAX请求。

在第一次请求时发送回门户的页面上创建一个隐藏的表单输入值,其中包含jsessionid。然后读取该表单变量,并在javascript代码中设置发出AJAX请求的cookie


我猜这已经起作用了,跨站点脚本不是问题吗?浏览器将阻止对主页来源以外的域的AJAX请求。

从他的问题来看,会话cookie没有通过门户从来源传递给用户。如果他不能通过门户向主请求添加cookie,那么这将不起作用。如果门户本质上是一个哑代理,那么不幸的是,这并不奇怪。@PlexQ-是的,这就是为什么“cookie”在引号中。它不是一个普通的cookie,但它的功能类似于cookie。这就是我回答的全部要点。。。使用另一种方法向应用程序标识一系列请求应使用哪个会话。在所有情况下,它仍然是同一个概念,只是不同的实现。我实现了一个会话侦听器并捕获会话id,并将所需的最小上下文存储在该会话密钥下的servletContext中。然后在每个ajax请求上,我还传递会话密钥,并根据servletContext中存在的会话验证请求。目前它只适用于一台服务器,但当我必须扩展到多台服务器时,我需要重新访问它以获得更强大的功能。我认为ehcache复制可以成为我的朋友thereYes,扩展到一个以上的服务器需要使用某种“共享会话”策略。谢天谢地,由于您在概念上仍在使用“会话”概念,因此在扩展相同的会话时应该不会有太多问题