在网上找了一下: Session代表客户的会话过程,客户登录时,往Session中传入一个对象,即可跟踪客户的会话。在Servlet中,传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用HttpSession对象的setAttribute方法的时候)和移去的时候(即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候)Session对象会自动调用监听器的valueBound和valueUnbound方法(这是HttpSessionBindingListener接口中的方法)。因此,再结合Application,在调用valueBound方法时,执行application.setAttribute(name,"登录"),退出或者timeout时,调用valueUnbound方法,执行application.RemoveAttribute(name),大概可以实现。缺点也是一旦非法退出,需要session失效才能登陆。
2、在用户表里再设置一字段,记录用户最后一次操作的时间;
3、用户登录时,判断是否已登录,如果已登录,提示他已经登录陆,或者上次登录未正常退出,请20分钟(假设你设定的session有效时间为20分钟)后再尝试登录;否则正常登录
3、提供正常退出链接,用户点击该链接,则将该字段置为未登陆;
4、对于未正常退出,每分钟启动一个线程,检查已登录的用户的最后一次操作的时间,如果超过了20分钟(刚好是session失效的时间,而session失效也是非正常退出的主要原因),则将其状态置为未登陆,注意,此时只检查登陆状态为已登陆的用户记录!这是一个思路吧,应该可以实现的。缺点在于用户非正常退出后,必须等待一段时间后才能再次登陆! 另外就是每分钟自动启动的线程,其代码一定要高效,否则会影响系统效率。要是session有onLost事件就好了,呵呵,像javascript的onBlur,Onchange事件,监听之,处理之!!!!
phoenix_zd(天马行空)的思路可以一试,就是这个自动启动的高效线程,呵呵,得好好琢磨一下。
这个如何处理?
例如:用户一直向服务器发出请求,连接到不同页面,此时用户并不超时,只是没有执行与数据库相关的操作,总不是每个请求都要记录吧,这样服务器的负担加大了。
我感觉服务器端,肯定可以获得各个session的信息,否则它如何判断用户超时?但是不知道具体该如何实现
UP
好像以前在哪儿看到过一个用servlet的解决方案,做法好像是可以把获得的session信息记录在一个文件里,每次都查询该文件。好像挺麻烦的。
忘了在哪儿看到的了,郁闷。
一开始就说了:在网上搜了一下,有人说用session监听器,可是不是很明白具体怎么实现。
Servlet中:
String name=request.getParameter("name");
if(getServletContext().getAttribute(name)!=null){
//本用户名已注册过,即重复登录
}else{
getServletContext().setAttribute(name,"登录");
} Jsp中:
String name=request.getParameter("name");
if(application.getAttribute(name)!=null){
//本用户名已注册过,即重复登录
}else{
application.setAttribute(name,"登录");
}
成功登录议会以后,下回怎么登录?
Session代表客户的会话过程,客户登录时,往Session中传入一个对象,即可跟踪客户的会话。在Servlet中,传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用HttpSession对象的setAttribute方法的时候)和移去的时候(即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候)Session对象会自动调用监听器的valueBound和valueUnbound方法(这是HttpSessionBindingListener接口中的方法)。因此,再结合Application,在调用valueBound方法时,执行application.setAttribute(name,"登录"),退出或者timeout时,调用valueUnbound方法,执行application.RemoveAttribute(name),大概可以实现。缺点也是一旦非法退出,需要session失效才能登陆。
import java.io.*;
import java.util.*;
import javax.servlet.http.*;//监听登录的整个过程
public class SessionListener implements HttpSessionBindingListener
{
public SessionListener()
{
} public void valueBound(HttpSessionBindingEvent event)
{ } public void valueUnbound(HttpSessionBindingEvent event)
{
}}
sission,application是jsp的内建对象,servlet怎么设置application的属性?
对servlet没什么认识的说