延长基于ajax的文件上载的会话时间

时间:2015-07-21 06:25:30

标签: java ajax spring-mvc session

我在我的应用程序中使用spring security,我的会话超时是30分钟。我也在前端使用了一些ajax调用。

我的问题是: -

问题-1 我正在通过ajax调用上传.xml文件,它需要花费超过30分钟,可能需要1小时(这取决于文件大小)。如何在spring security或其他任何方式处理ajax调用的会话超时? 因为文件上传成功后它将我重定向到登录页面实际上我不需要这个。我希望在我的应用程序中发生任何ajax调用时更新服务器端的会话。

请帮我解决这个问题。

Ajax代码

function uploadForm(){

        if ($('div.bootstrap-filestyle').find('input[type="text"]')
                .val() == "") {
            alert("No file selected");
        } else {
            var selectedActionUrl = $("#drpLink").val();
            console.log(selectedActionUrl);
            var Url = "";
            if (selectedActionUrl == 1) {
        Url = "${pageContext.request.contextPath}/excellUpload";
            } 

            console.log('file uploading..');
            var $statusMsgDiv = $('div#status-msg');
            $('#result').html('');
            var $uploadFrm = $("#uploadForm");
            $uploadFrm.attr('action', fUrl);
            $uploadFrm.ajaxForm(
                {
                beforeSend : function() {
                    //some logic    
                },
                success : function(jsonRes) {
                //some logic
                },
                error : function(xhr, textStatus,errorThrown) {
                //some logic

                }).submit();
        }
        return false;
        }

服务器端代码

web.xml文件

// .....一些代码
        
的Login.jsp       

<error-page>
    <error-code>404</error-code>
    <location>/404</location>
</error-page>

<session-config>
    <session-timeout>30</session-timeout>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>

问题2

我是否需要每次在fileUpload控制器中更新会话超时值或需要编写任何其他可以提供所有ajax请求或响应的控制器?请帮我解决这个问题。 在此先感谢.....

3 个答案:

答案 0 :(得分:1)

  

对于某些文件上传,它还需要5到8小时,所以我想要它   当ajax请求进入我不想要的服务器时动态动态   任何会话超时。用户在没有db的情况下闲置30分钟后   点击/ ajax调用该时间只需要会话超时。

<session-config>
    <session-timeout>30</session-timeout>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>

当您在web.xml中配置会话超时时,在此方案中,如果客户端与客户端之间不活动的时间段,会话将仅会超时。浏览器超过30分钟。如果在这30分钟内有客户要求。会话将再次将其超时计数器重置为30分钟。即使您没有配置会话超时,也会有默认的服务器会话超时时间间隔。对于tomcat,它是30分钟,服务器将在30分钟不活动后自动使会话无效。

现在关于你的ajax文件上传过程,如果客户端和客户端之间存在持续的交互。服务器。会议不会超时。 Web应用程序中的会话仅超时主要是由于两个原因1.安全性2.不活动,如果客户端不再需要,则可以回收分配给会话的资源。

以编程方式使用ajax请求可以设置会话超时

HttpSession session = request.getSession();
session.setMaxInactiveInterval(20*60);

优先于web.xml配置。

您还可以实施JSFIDDLE

  

是的,我立即尝试多次重定向到登录   文件上传成功/失败后的页面。(文件上传时需要更多   超过30分钟。

您需要在客户端和客户端之间创建心跳拦截器。服务器。在上传文件的同一个ajax调用中。您必须在每n秒/分钟后定期向服务器发送请求,这将使您的会话保持活动状态。在ajax中创建一个回调函数,在文件上传到服务器后停止发送请求。检查cookie based session persistence&amp; this

答案 1 :(得分:0)

不要通过web.xml设置会话超时,而是尝试动态地在控制器中设置它。您可以这样设置,

HttpSession session = request.getSession();
session.setMaxInactiveInterval(dynamicMinutesValue*60);

Source

答案 2 :(得分:-1)

你可以这样做:

创建一个不需要任何会话变量的URL。话虽这么说,我在想你是在登录功能的某个地方设置你的会话。确保无法登录即可访问上传URL。

要做到这一点,你应该有一个监听器/拦截器,以确保客户端访问的所有URL都在会话中。这样,您不仅可以控制上传,还可以控制您希望绕过会话超时的任何其他URL。 :)

有很多方法可以给这只猫上皮。

如果这是有道理的,请告诉我。

感谢。