100 求问??????????

热烈的红颜 2008-07-08 11:25:01
问题一: 打开浏览器 就建立一个session????????? 正确吗? 并且 打开一次浏览器 只建立一个session??? 正确吗??
在打开一个浏览器 一次连接的情况下 不能通过request.getSession(false);来建立新的session吗?????问题二:servelt 在服务器启动的时候是自动调用Init()方法 还是必须通过 on-load-stratup来加载啊??? 那么 一个servlet什么时候结束啊????????
问题三: (利用数据库等持久化设备)怎么实现 计算某个用户在24小时(一天)的在线时间长度(要考虑 用户通过非法关闭浏览器 而造成时间不准等误差)
...全文
101 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Landor2004 2008-07-09
  • 打赏
  • 举报
回复
找了个文章,你看看吧
1、session在何时被创建
一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <% @page session="false"%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。

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

2、session何时被删除
综合前面的讨论,session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session)

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

4、有个HttpSessionListener是怎么回事
你可以创建这样的listener去监控session的创建和销毁事件,使得在发生这样的事件时你可以做一些相应的工作。注意是session的创建和销毁动作触发listener,而不是相反。类似的与HttpSession有关的listener还有 HttpSessionBindingListener,HttpSessionActivationListener和 HttpSessionAttributeListener。

5、存放在session中的对象必须是可序列化的吗
不是必需的。要求对象可序列化只是为了session能够在集群中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。在 Weblogic Server的session中放置一个不可序列化的对象在控制台上会收到一个警告。我所用过的某个iPlanet版本如果 session中有不可序列化的对象,在session销毁时会有一个Exception,很奇怪。

6、如何才能正确的应付客户端禁止cookie的可能性
对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL,具体做法参见[6]
http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770

7、开两个浏览器窗口访问应用程序会使用同一个session还是不同的session
参见第三小节对cookie的讨论,对session来说是只认id不认人,因此不同的浏览器,不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。

8、如何防止用户打开两个浏览器窗口操作导致的session混乱
这个问题与防止表单多次提交是类似的,可以通过设置客户端的令牌来解决。就是在服务器每次生成一个不同的id返回给客户端,同时保存在session里,客户端提交表单时必须把这个id也返回服务器,程序首先比较返回的id与保存在session里的值是否一致,如果不一致则说明本次操作已经被提交过了。可以参看《J2EE核心模式》关于表示层模式的部分。需要注意的是对于使用javascript window.open打开的窗口,一般不设置这个id,或者使用单独的id,以防主窗口无法操作,建议不要再window.open打开的窗口里做修改操作,这样就可以不用设置。

9、为什么在Weblogic Server中改变session的值后要重新调用一次session.setValue
做这个动作主要是为了在集群环境中提示Weblogic Server session中的值发生了改变,需要向其他服务器进程复制新的session值。

10、为什么session不见了
排除session正常失效的因素之外,服务器本身的可能性应该是微乎其微的,虽然笔者在 iPlanet6SP1加若干补丁的Solaris版本上倒也遇到过;浏览器插件的可能性次之,笔者也遇到过3721插件造成的问题;理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题。
出现这一问题的大部分原因都是程序的错误,最常见的就是在一个应用程序中去访问另外一个应用程序。我们在下一节讨论这个问题。
havelock 2008-07-09
  • 打赏
  • 举报
回复
问题一: 打开浏览器 就建立一个session????????? 正确吗? 并且 打开一次浏览器 只建立一个session??? 正确吗??

后面那个问题似乎有问题吧??

打开一次浏览器只建立一个session和打开浏览器建立一个session有区别吗??


在线时间长度在非法关闭时没法得到的,要减少误差只有把session的生命周期缩短,但是会加大服务器负担.
如果不是必须的话,统计个大概就行了.
热烈的红颜 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 For_suzhen 的回复:]
浏览器关闭可以用JS方法来判断。然后通知后台
另外,你的 <非法>关闭指的是什么意思,用户点的差号吗?
[/Quote]
我的 非法关闭就是 指 突然点击叉叉把浏览器关闭了 没有通过注销的方式来结束
你说的 用JS来通知后台 改怎么做啊 ..................请多度指点
liuwanru 2008-07-09
  • 打赏
  • 举报
回复
0
For_suzhen 2008-07-09
  • 打赏
  • 举报
回复
浏览器关闭可以用JS方法来判断。然后通知后台
另外,你的<非法>关闭指的是什么意思,用户点的差号吗?
热烈的红颜 2008-07-09
  • 打赏
  • 举报
回复
坚听 是监听不到 浏览器非法关闭的情况 有什么其他的方法具体说一下也 小弟 先谢谢了
jishu_vip 2008-07-09
  • 打赏
  • 举报
回复
第三个问题需要用到监听器吧。
cuilike 2008-07-08
  • 打赏
  • 举报
回复
我的回答。。。
问题一: 打开浏览器 就建立一个session????????? 正确吗? 不对。。
打开一次浏览器 只建立一个session??? 正确吗? 正确。
在打开一个浏览器 一次连接的情况下 不能通过request.getSession(false);来建立新的session吗?????
request.getSession(true);可以吧
问题二:servelt 在服务器启动的时候是自动调用Init()方法 还是必须通过 on-load-stratup来加载啊??? 那么 一个servlet什么时候结束啊????????
在 Servlet 的生命期中,仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet。 也可以通过 on-load-stratup来加载。
在WEB-INF/web.xml文件中加入:
  <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.mycompany.mypackage.MyServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/runit/*</url-pattern>
  </servlet-mapping>
在启动时将自动装载这个servlet,你可以通过以下的url执行该servlet

问题三: 没有做过。。。一般是用session吧。。。session失效的时间-session创建的时间。。。






money8899 2008-07-08
  • 打赏
  • 举报
回复
不明白?????

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧