关于服务器端知道session是否存在的问题

csfengping 2009-09-10 05:44:15
当浏览器端,关机,掉线,或者关闭所有页面时,服务器端怎么第一时间知道当前用户已经离线
...全文
508 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
csfengping 2009-09-17
  • 打赏
  • 举报
回复
-------------------web.xml配置:
<filter>
<filter-name>mainfilter</filter-name>
<filter-class>com.chance.MainFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>mainfilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
------------------MainFilter.java--------------------------
package com.chance;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;
import java.io.IOException;

public class MainFilter implements Filter{
public void init(FilterConfig filterConfig)throws ServletException{
//
}

public void doFilter(ServletRequest request,
ServletResponse response,FilterChain chain)throws ServletException, IOException{
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
boolean isValid=true;
///////check attribute
isValid=req.getSession().getAttribute("name")==null;
if(isValid){
req.getSession().getServletContext()
.getRequestDispatcher("/login.jsp").forward(req, res);
}else
chain.doFilter(request,response);
}

public void destroy(){}
}
owen_008 2009-09-12
  • 打赏
  • 举报
回复
建议看看http协议~~呵呵
DocotorNo1 2009-09-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 windforcecn 的回复:]
这是http协议

关闭浏览器即判断session销毁
[/Quote]
看看HTTP协议你就明白啦
qq774097676 2009-09-11
  • 打赏
  • 举报
回复
学习一下
DJBCAINIAO 2009-09-11
  • 打赏
  • 举报
回复
你可以有用户下线时或者关闭浏览器时给你的服务器一个信息这样就可以控制啦,我们公司以前项目有这样做过,代码呢我找不到啦
logon29 2009-09-11
  • 打赏
  • 举报
回复
关闭浏览器后,服务器端的session并不会马上清除的,本地也会在cookies保留session信息(如果cookie没有设置关闭浏览器就失效的话),服务器端需要等到session失效后才会清除(session失效时长在web.xml中可配置)。
不清楚服务器端有没有可监听访客是否关闭浏览器到方法,不过可以考虑一下这个方法:
在页面上嵌入一个iframe页面,该页面用js控制没间隔1s(时间间隔自己按需设置)向服务端发起一次请求,如果服务端在1min内一直 没收到这个请求的话,可视为用户已经关闭浏览器。
如果用spring框架的话,ScheduledTimerTask刚好可以实现这个需求。否则自己写监听器。
youdandan 2009-09-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 angel6709 的回复:]
监听可以,但需要时刻监视session的状态。
如果人口不是很多就直接放服务器的对象列表里吧
[/Quote]
有道理
幫頂
andyan_2008 2009-09-11
  • 打赏
  • 举报
回复
通过session判断
曾三神 2009-09-11
  • 打赏
  • 举报
回复
session是服务器给你创建的,并把session的id存在了客户端的cookie中
当你再次打开浏览器的时候,如果cookie中的sessionId对应的服务器上的session还存在,没有被服务器销毁的话。则默认你还在这次的会话中。
aaby167 2009-09-11
  • 打赏
  • 举报
回复
基于web的聊天室原理就是这样
aaby167 2009-09-11
  • 打赏
  • 举报
回复
只能是客户端不断的请求
服务器才知道你还活着没
sunxing007 2009-09-11
  • 打赏
  • 举报
回复
你要搞清楚http是请求-响应 模式,一次请求-响应完毕之后,连接就断开了。除非再次请求,否则服务器是无法判断用户是否关闭了,是否掉线了等等。服务器是无法主动和浏览器建立连接的。所以除非用户主动注销,或者是session timeout, 没有其他办法,不要异想天开服务器能够知道用户什么时候关闭浏览器。而且作为http服务器,他没有必要随时知道用户的状态。这是由他的功能地位决定的。
guodong66 2009-09-11
  • 打赏
  • 举报
回复
http协议是无状态的链接,这种需求不可能得。

另15楼的回答没办法实现,这样对服务器的压力太大,真实项目不可能使用。
coolbamboo2008 2009-09-10
  • 打赏
  • 举报
回复
学习
gesanri 2009-09-10
  • 打赏
  • 举报
回复
看看这个
http://topic.csdn.net/t/20050225/08/3804877.html
铁匠梁 2009-09-10
  • 打赏
  • 举报
回复
session不是有个超时时间吗?
意味着用户如果在这段时间内不作为,就会自动删除该会话。
woming66 2009-09-10
  • 打赏
  • 举报
回复
并不会立即消失除对应服务器端的session, 有个...BoundListener类(不总用名字忘记了),可以和一个session对应的状态绑定!
rookie001 2009-09-10
  • 打赏
  • 举报
回复
这应该有现成监听器或适配器,不用自己写吧,查查API文档就行了
liangwansheng 2009-09-10
  • 打赏
  • 举报
回复
我的想法是如里这个人下线了,就弹出一个提示,否则就不弹。
angel6709 2009-09-10
  • 打赏
  • 举报
回复
监听可以,但需要时刻监视session的状态。
如果人口不是很多就直接放服务器的对象列表里吧
加载更多回复(6)

67,514

社区成员

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

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