zoukankan      html  css  js  c++  java
  • iframe下面的session问题

    在写iframe完成长连接获取上传状态的时候,有两次请求,一次上传,一次获取状态的。 

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

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

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



    这个时候,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初始化的时候访问这个链接。
  • 相关阅读:
    数据结构与算法10 微服务接口的鉴权和限流 [MD]
    .Net开发环境配置[OS/IIS/VS...]
    一、单件模式
    正则表达式调试器1.1
    C#2.0新特性系列文章转载
    巧用VS2005解决VS2005网站发布不便问题
    配置VS2005,加速VS2005运行速度
    转载:ASP.NET运行机制 和 图片盗链问题
    ASP.NET页面提前处理问题
    关于NTLM认证的python和.NET实现
  • 原文地址:https://www.cnblogs.com/chenying99/p/2505654.html
Copyright © 2011-2022 走看看