报表session与应用session

编辑
  • 文档创建者:文档助手1
  • 浏览次数:5130次
  • 编辑次数:6次
  • 最近更新:Kevin-s 于 2019-06-21
  • 1. 报表 Session 与应用 Session

    报表集成到项目中可能会有一个疑问就是系统应用和报表应用在一个web服务器下,那系统 Session 和报表 Session 是不是一个 Session 呢?如果不是那会不会有冲突呢?

    答案是:不是同一个 Session 也不会起冲突,因为应用的 Session 存放的是 request 请求等一些共享信息,而报表 Session 存放的是访问报表的相关信息,如访问的是不是同一个模板等,两者是完全独立,所以不会冲突。

    2. FineReport 中创建与关闭 Session 机制

    正常情况下,当客户端浏览器访问报表服务器端的某张报表时,便会产生一个 Session 会话,当用户关闭浏览器的时候就会通知报表服务器关闭这个 Session,但不会使保存在服务器端的 Session 对象消失,同样也不会使已经保存到硬盘上的持久化 Cookie 消失。

    若用户的机器由于某种原因如非正常关机等等导致浏览器非正常关闭时,服务器没有收到关闭这个 Session 的信息,会一直保存这个不必要的 Session。为了解决这个问题,我们软件中提供了这样一种机制,浏览器每隔 30 秒向服务器发送一个“i am alive”信息,若报表服务器一分钟没有收到这个信息便会自动关闭这个Session。当浏览器遇到非正常停止时,便不会发送“i am alive”信息,相应的 Session 会在一分钟以内被关闭。

    3. Session 基本概念

    注:这里指的是浏览器 Session

    Session 机制本身并不复杂,然而其实现和配置上的灵活性却使得具体情况复杂多变。这也要求我们不能把仅仅某一次的经验或者某一个浏览器,服务器的经验当作普遍适用的经验,而是始终需要具体情况具体分析。

    通俗的说:客户端浏览器访问某个地址,发送了一个请求,就产生一个 Session 会话,现在的浏览器都可以打开多个 Tab 窗口,打开的都属于一个 Session,当该浏览器关闭的时候 Session 就关闭了。若不关闭该浏览器,再次打开一个浏览器,会重新创建一个 Session。

    3.1 Session 在何时被创建

    一个常见的误解是以为 Session 在有客户端访问时就被创建,然而事实是直到某 Server 端程序调用 HttpServletRequest.getSession(true) 这样的语句时才被创建,注意如果 JSP 没有显示的使用<%@page session="false"%>关闭 Session,则 JSP 文件在编译成 Servlet 时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true),这也是 JSP 中隐含的 Session 对象的来历。

    由于 Session 会消耗内存资源,因此,如果不打算使用 Session,应该在所有的 JSP 中关闭它。

    3.2 Session 何时被删除

    综合前面的讨论,Session 在下列情况下被删除:

    a、程序调用 HttpSession.invalidate() 

    b、距离上一次收到客户端发送的 Session ID 时间间隔超过了 Session 的最大有效时间

    c、服务器进程被停止

    3.3 如何做到在浏览器关闭时删除 Session

    严格的讲,做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用 JavaScript 代码 window.oncolose 来监视浏览器的关闭动作,然后向服务器发送一个请求来删除 Session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。


    附件列表


    主题: 报表应用
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]