欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iframe下面的session问题

程序员文章站 2024-01-31 20:08:52
...
在写iframe完成长连接获取上传状态的时候,有两次请求,一次上传,一次获取状态的。

发现第一次上传上传的请求和获取状态的请求是不同的session,再次上传时就没问题了。

找了资料,都说是放jsessionid,或者加P3P头信息。这些都不是我现在的真正问题。

在google的bug工具中,看到原因了。
我的iframe写得是
<iframe name="upload${inputName}" src="" id="upload${inputName}" style="display:none">
</iframe>

iframe下面的session问题
            
    
    博客分类: http协议p.jeep.软件工程p.jee服务器p.springp.其他p.javascriptp.jqueryp.jsp奇怪问题p.html  

这个时候,src虽然什么都没写,但是它还是请求了一次
GET about:blank HTTP/1.1

User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

Referer: http://127.0.0.1:8080/cgodo-fileupload/fileUploadComponent?key=1322999139092file&inputName=file

,再上传的时候,iframe
请求的cookie中并没有发送jsessionid过去
POST /cgodo-fileupload/doUpload.html?key=1322999245171file HTTP/1.1
Cookie: OFBiz.Visitor=10360

这是因为iframe初始化的时候,src是空,它的cookie中没有信息,发送请求过去的时候cookie自然就没有jessionid信息了。服务器就创建了新的session。

而第一次上传完毕后,从服务器中获取到了一个session,所以第二次上传,读取状态的和上传文件的两次请求就是同一个session了。

解决方案
在iframe中,请求一次我们应用中数据最少的一个链接,这样就能生成session了。
我这里使用的是springmvc,写了一个什么都不输出的action。这个action一定要确保把session创建好。
/**
*
* 描述:为iframe生成sessionid
*
* @param locale
* @return
* @author liyixing 2011-12-4 下午07:39:43
*/
@ResponseBody
@RequestMapping("/fileUploadSessionId")
public String fileUploadSessionId(HttpServletRequest request) {
request.getSession(true);

return null;
}

然后让iframe初始化的时候访问这个链接。
  • iframe下面的session问题
            
    
    博客分类: http协议p.jeep.软件工程p.jee服务器p.springp.其他p.javascriptp.jqueryp.jsp奇怪问题p.html  
  • 大小: 26.9 KB