基于session 认证时swfupload 上传失败 - 点滴记忆*记忆点滴
收藏本站

基于session 认证时swfupload 上传失败

     最近使用swfupload 做上传。环境是swfupload 2.2 ,tomcat 7。上传需要登录,登录状态session 记录。

最初是session 获取不到,最一个公共方法在链接上带上session id ,测试ie,chrome ,firefox 都ok。

没两天测试发现,360 极速上传失败,302错误,分析发现session 没找到。开始以为是360 原因,调试发现cookie 竟然有session id,但不是登录用户的session id,并且那个session id 服务器里并不存在,后面切换到swf2.5 版本,cookie 不见了,上传依然失败,这才发现拷贝过来的代码id名称由 jsessionid 写成了 jsessionId ,结果导致该参数无效。


/**
 * swfupload 上传路径加上session id
 * @param url 相对路径
 * @returns {String}
 */
function uploadUrl(url,sessionId){
	return getRootPath()+url+";jsessionid="+sessionId;
}


拷贝害死人。

还有比较奇怪的,刚开始测试360极速 cookie 竟然会有session id值,而其他浏览器都没有,这也导致发了很长时间去找浏览器的原因。后面sessionid 名称修复后,并还原到swfupload 2.2 再测试, cookie 不存在了,很奇怪的问题。

org.apache.catalina.connector.CoyoteAdapter

 String sessionID = null;
            if (request.getServletContext().getEffectiveSessionTrackingModes()
                    .contains(SessionTrackingMode.URL)) {

                // Get the session ID if there was one
                sessionID = request.getPathParameter(
                        SessionConfig.getSessionUriParamName(
                                request.getContext()));
                if (sessionID != null) {
                    request.setRequestedSessionId(sessionID);
                    request.setRequestedSessionURL(true);
                }
            }

            // Look for session ID in cookies and SSL session
            parseSessionCookiesId(req, request);

由此想到了一个问题,如果cookie 和url 都存在session id ,但值不一致会以谁优先呢。

经过分析tomcat 7 源码发现, 默认情况下 url 中session id 会首先解析,如根据url session id 找不到相应的session 才会使用cookie session id 去找。

相关源代码如下:



    留下足迹