Class.forName("weblogic.jdbc.sqlserver.SQLServerDriver"); Connection con = DriverManager.getConnection(url,"sa","jfy"); PreparedStatement stmt = con.prepareStatement("update UserLoginInfo set LogoutTime='"+logouttime+"' where SessionID='"+session.getId()+"'");
用pagecontext与session的bound或unbound监听,
具体查找一下资料
这个方法不错吗!
import javax.servlet.*;
import java.util.Date;
import java.sql.*;
import java.net.URL;
import java.text.*;
import java.util.Vector;
import java.net.Socket.*;
public class listen implements HttpSessionBindingListener {
public listen(){
}
private Vector users=new Vector();
public int getCount(){
users.trimToSize();
return users.capacity();
}
public boolean existUser(String userName){
users.trimToSize();
boolean existUser=false;
for (int i=0;i<users.capacity();i++ )
{
if (userName.equals((String)users.get(i)))
{
existUser=true;
break;
}
}
return existUser;
} public boolean deleteUser(String userName) {
users.trimToSize();
if(existUser(userName)){
int currUserIndex=-1;
for(int i=0; i<users.capacity();i++){
if(userName.equals((String)users.get(i))){
currUserIndex=i;
break;
}
}
if (currUserIndex!=-1){
users.remove(currUserIndex);
users.trimToSize();
return true;
}
}
return false;
} public Vector getOnLineUser()
{
return users;
}
public void valueBound(HttpSessionBindingEvent e) {
users.trimToSize();
HttpSession session = e.getSession();
session.getAttribute("teleno");
if(!existUser(e.getName())){
users.add(e.getName());
try
{
java.util.Date dt = new java.util.Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String logintime=sdf.format(dt);
String url = "jdbc:bea:sqlserver://192.168.20.25:1433;DatabaseName=Community";
Class.forName("weblogic.jdbc.sqlserver.SQLServerDriver");
Connection con = DriverManager.getConnection(url,"sa","jfy");
PreparedStatement stmt = con.prepareStatement("insert into UserLoginInfo(Telephone,LoginTime,SessionID,UserIP) values('"+e.getName()+"','"+logintime+"','"+session.getId()+"','"+session.getAttribute("ip")+"')");
stmt.executeUpdate();
stmt.close();
con.close();
}catch(java.lang.Exception ex){
ex.printStackTrace();
}
System.out.print(session.getAttribute("ip")+"\t 登入到系统\t"+(new Date()));
System.out.println(" 在线用户数为:"+getCount());
}else
System.out.println(e.getName()+"已经存在");
} public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName=e.getName();
deleteUser(userName);
HttpSession session = e.getSession();
try
{
java.util.Date dt = new java.util.Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String logouttime=sdf.format(dt);
String url = "jdbc:bea:sqlserver://192.168.20.25:1433;DatabaseName=Community";
Class.forName("weblogic.jdbc.sqlserver.SQLServerDriver");
Connection con = DriverManager.getConnection(url,"sa","jfy");
PreparedStatement stmt = con.prepareStatement("update UserLoginInfo set LogoutTime='"+logouttime+"' where SessionID='"+session.getId()+"'");
stmt.executeUpdate();
stmt.close();
con.close();
}catch(java.lang.Exception ex){
ex.printStackTrace();
}
System.out.print(userName+"\t 退出系统\t"+(new Date()));
System.out.println(" 在线用户数为:"+getCount());
}
}
session事件监听的写法为:
public class SessionTest implements javax.servlet.http.HttpSessionBindingListener
{
//加入session对象时触发此方法
public void valueBound(HttpSessionBindingEvent event)
{
}
//移出session时触发此方法
public void valueUnbound(HttpSessionBindingEvent event)
{
}
}
把用户和session对象一一对应,置入一个Map中,每次登录的时候检查当前用户是否已经在这个Map中,如果有,并且session不相等(==),就把前一个session置为无效;如果当前用户不在Map中,置入。用户退出,从Map中remove,并且置session无效;session自动过期,从Map中remove。
需要注意的是,这些操作必须同步。