如何保证同一用户名不能够登录两次 sessionListener监听session的产生和销去生成一个session就在一个容器里面加入用户信息,以后用来判断是否已登陆 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 session不行的,每次都生成不同的session id,没有办法判断的有人说可以放到application对象里,里面存有所有session的对象,不知道有人会用么给点简单的代码,谢谢 把用户ID从库中取出,存入session然后判断不就行了! 两个用户都用用户名1在不同的机器上登录,能取到另外一台机器的session么?所以没有办法比较阿 用登陆判断就可以了,SESSION也可以。 session占内存,想了个笨办法:用户登录成功后,把其用户名放入一个表A中,这就要求每个用户登录时先查询表A,如果有相同的用户名,则不让其登录!用户退出登录时,再把表A中其相应的记录(其用户名)删除即可!提供一个思路,希望对你有用! 登录后用户名可以存储在一个和用户名相同的Session变量里,以后判断这个Session是否为null就可以了。 其实就在用户表加多一个字段,表示用户是否登录用户登录除了校验密码之外还要确定该字段是否为false登录之后置为true 用hashtable记录每一个用户的用户名, 用户登陆时从它内取值,值为空则用户还没有登陆, 为了保证 用户退出时 hashtable中一定要清除用户记录, 在用户退出时从hashtable中清除用户,并在session失效时再从hashtable中清除一次用户 sessionListener监听session的产生和销去生成一个session就在一个容器里面加入用户信息,以后用来判断是否已登陆就用这个 wenming168(清风)说得很有道理但有没有具体实现方案? to zjwpanhp(php) :两个用户都用用户名1在不同的机器上登录,能取到另外一台机器的session么?所以没有办法比较阿session 是由 servlet容器 产生 通俗的讲就是有WEB服务器端产生的 只要你把一个session 产生时 在它里面放入 产生该session 的用户名或ID ,每次登陆时 都遍例一下 所有session 判断是否已经有等于该用户名或用户ID的session的存在 有则已登陆,没有则没登陆啊 wenming168(清风) 所说有道理,可怎么保证用户是正常退出呢?funcreal(new PLMM[Integer.MAX_VALUE]) :应该是一个不错的解决方案,可否写一段代码:) 用户登录成功后,把其用户名放入一个表A中,这就要求每个用户登录时先查询表A,如果有相同的用户名,则不让其登录!用户退出登录时,再把表A中其相应的记录(其用户名)删除即可!提供一个思路,希望对你有用! 用cookies 把这个用户名获取,记录并设定一个时间 让他在莫个时间段不能在进行操作 就想投票程序 我也想知道怎么做啊~!还是session好啊 ~~ funcreal(new PLMM[Integer.MAX_VALUE]) sessionListener 监听session的产生和销去 生成一个session就在一个容器里面加入用户信息,以后用来判断是否已登陆 其实我也常见得这是个难题因为我在应用C#.net时,好像只能监听到session的产生,不能监听到session取消的事件!所以不管你怎么做都很难判断是否已登录 !应为你无法捕获用户下线的时候,所以系统始终会认为他在线!!如果能控制session消亡的话,那怎么样都可以实现,比如保存到数据库,或Application中都行! 都看了n个类似的提目了,一直不得要解,综合一下感觉sessionListener是一个相对比较可以的实现方法,捕捉session消亡的情况下的事件,修改保存在数据库或application内的值。不过还是有一点问题,一个session消亡需要一定时间,有一个延迟 大家的争议关键就在于Session对象销毁时能不能删除用户上。关于这一点,一楼的方法是最正确的!我这里找来一段代码,只是说明一下问题import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;import javax.servlet.http.HttpSessionActivationListener;import javax.servlet.http.HttpSessionBindingListener;import java.io.PrintWriter;import java.io.FileOutputStream;public final class MySessionListener implements HttpSessionActivationListener ,HttpSessionBindingListener , HttpSessionAttributeListener, HttpSessionListener,ServletContextListener { ServletContext context; int users=0; //HttpSessionActivationListener public void sessionDidActivate(HttpSessionEvent se) { logout("sessionDidActivate("+se.getSession().getId()+")"); } public void sessionWillPassivate(HttpSessionEvent se) { logout("sessionWillPassivate("+se.getSession().getId()+")"); }//HttpSessionActivationListener //HttpSessionBindingListener public void valueBound(HttpSessionBindingEvent event) { logout("valueBound("+event.getSession().getId()+event.getValue()+")"); } public void valueUnbound(HttpSessionBindingEvent event) { logout("valueUnbound("+event.getSession().getId()+event.getValue()+")"); } //HttpSessionAttributeListener public void attributeAdded(HttpSessionBindingEvent event) { logout("attributeAdded('" + event.getSession().getId() + "', '" + event.getName() + "', '" + event.getValue() + "')"); } public void attributeRemoved(HttpSessionBindingEvent event) { logout("attributeRemoved('" + event.getSession().getId() + "', '" + event.getName() + "', '" + event.getValue() + "')"); } public void attributeReplaced(HttpSessionBindingEvent se) { logout("attributeReplaced('"+se.getSession().getId()+",'"+se.getName()+"','"+se.getValue()+"')"); }//HttpSessionAttributeListener //HttpSessionListener public void sessionCreated(HttpSessionEvent event) { //用Hashtable来存放用户进行比较 users++; logout("sessionCreated('" + event.getSession().getId() + "'),目前有"+users+"个用户"); context.setAttribute("users",new Integer(users)); } public void sessionDestroyed(HttpSessionEvent event) { //在这里可以加入用户销毁时要进行的操作 users--; logout("sessionDestroyed('" + event.getSession().getId() + "'),目前有"+users+"个用户"); context.setAttribute("users",new Integer(users)); }//HttpSessionListener //ServletContextListener public void contextDestroyed(ServletContextEvent sce) { logout("contextDestroyed()-->ServletContext被销毁"); this.context = null; } public void contextInitialized(ServletContextEvent sce) { this.context = sce.getServletContext(); logout("contextInitialized()-->ServletContext初始化了"); }//ServletContextListener private void logout(String message) { PrintWriter out=null; try { out=new PrintWriter(new FileOutputStream("c:\\session.txt",true)); out.println(new java.util.Date().toLocaleString()+"::Form MySessionListener: " + message); out.close(); } catch(Exception e) { out.close(); e.printStackTrace(); } } } 相应的JSP文件一起贴出来执行操作:session.setAttribute("userName","creater")<br><% session.setAttribute("userName","creater");%>session.setAttribute("userName","creater")<br><% session.setAttribute("userName","creater");%>session.removeAttribute("userName","creater")<br><% session.removeAttribute("userName");%>目前有<%=getServletContext().getAttribute("users")%>个用户。<br>after session.invalidate()<br><% session.invalidate();%>目前有<%=getServletContext().getAttribute("users")%>个用户。 关于htmlparser的问题。 怎么JAVASCRIPT代码看起来那么复杂啊? Servlet里 的 <a href="file:///.. 超链接片段点击没反应 一个数据库搜索问题 Eclipse3.3重启tomcat不能加载struts.xml的修改 請問JSP文件操作中的字節流,字符流,數據流,對象流等操作流有什么不同呢 web应用下的文件读取问题(高手请进) jsp访问Access时出现的数据错误 高手请进,关于动态数组 2 个问题 求web上表格合并拆分的算法,给点想法就行 十万火急 求救jsp读取access中的数据失败
给点简单的代码,谢谢
用户登录成功后,把其用户名放入一个表A中,这就要求每个用户登录时先查询表A,如果有相同的用户名,则不让其登录!用户退出登录时,再把表A中其相应的记录(其用户名)删除即可!提供一个思路,希望对你有用!
用户登录除了校验密码之外还要确定该字段是否为false
登录之后置为true
监听session的产生和销去
生成一个session就在一个容器里面加入用户信息,以后用来判断是否已登陆
就用这个
但有没有具体实现方案?
两个用户都用用户名1在不同的机器上登录,能取到另外一台机器的session么?所以没有办法比较阿
session 是由 servlet容器 产生 通俗的讲就是有WEB服务器端产生的 只要你把一个session 产生时 在它里面放入 产生该session 的用户名或ID ,每次登陆时 都遍例一下 所有session 判断是否已经有等于该用户名或用户ID的session的存在 有则已登陆,没有则没登陆啊
funcreal(new PLMM[Integer.MAX_VALUE]) :应该是一个不错的解决方案,可否写一段代码:)
sessionListener 监听session的产生和销去
生成一个session就在一个容器里面加入用户信息,以后用来判断是否已登陆 其实我也常见得这是个难题
因为我在应用C#.net时,好像只能监听到session的产生,不能监听到session取消的事件!
所以不管你怎么做都很难判断是否已登录 !
应为你无法捕获用户下线的时候,所以系统始终会认为他在线!!如果能控制session消亡的话,那怎么样都可以实现,比如保存到数据库,或Application中都行!
综合一下感觉sessionListener是一个相对比较可以的实现方法,捕捉session消亡的情况下的事件,修改保存在数据库或application内的值。不过还是有一点问题,一个session消亡需要一定时间,有一个延迟
关于这一点,一楼的方法是最正确的!我这里找来一段代码,只是说明一下问题import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionBindingListener;
import java.io.PrintWriter;
import java.io.FileOutputStream;public final class MySessionListener
implements HttpSessionActivationListener ,HttpSessionBindingListener ,
HttpSessionAttributeListener, HttpSessionListener,ServletContextListener {
ServletContext context;
int users=0;
//HttpSessionActivationListener
public void sessionDidActivate(HttpSessionEvent se)
{
logout("sessionDidActivate("+se.getSession().getId()+")");
}
public void sessionWillPassivate(HttpSessionEvent se)
{
logout("sessionWillPassivate("+se.getSession().getId()+")");
}//HttpSessionActivationListener
//HttpSessionBindingListener
public void valueBound(HttpSessionBindingEvent event)
{
logout("valueBound("+event.getSession().getId()+event.getValue()+")");
}
public void valueUnbound(HttpSessionBindingEvent event)
{
logout("valueUnbound("+event.getSession().getId()+event.getValue()+")");
}
//HttpSessionAttributeListener
public void attributeAdded(HttpSessionBindingEvent event) {
logout("attributeAdded('" + event.getSession().getId() + "', '" +
event.getName() + "', '" + event.getValue() + "')");
} public void attributeRemoved(HttpSessionBindingEvent event) {
logout("attributeRemoved('" + event.getSession().getId() + "', '" +
event.getName() + "', '" + event.getValue() + "')");
}
public void attributeReplaced(HttpSessionBindingEvent se)
{
logout("attributeReplaced('"+se.getSession().getId()+",'"+se.getName()+"','"+se.getValue()+"')");
}//HttpSessionAttributeListener
//HttpSessionListener
public void sessionCreated(HttpSessionEvent event) {
//用Hashtable来存放用户进行比较
users++;
logout("sessionCreated('" + event.getSession().getId() + "'),目前有"+users+"个用户");
context.setAttribute("users",new Integer(users));
} public void sessionDestroyed(HttpSessionEvent event) {
//在这里可以加入用户销毁时要进行的操作
users--;
logout("sessionDestroyed('" + event.getSession().getId() + "'),目前有"+users+"个用户");
context.setAttribute("users",new Integer(users)); }//HttpSessionListener
//ServletContextListener
public void contextDestroyed(ServletContextEvent sce) {
logout("contextDestroyed()-->ServletContext被销毁");
this.context = null;
} public void contextInitialized(ServletContextEvent sce) {
this.context = sce.getServletContext();
logout("contextInitialized()-->ServletContext初始化了");
}//ServletContextListener
private void logout(String message) {
PrintWriter out=null;
try
{
out=new PrintWriter(new FileOutputStream("c:\\session.txt",true));
out.println(new java.util.Date().toLocaleString()+"::Form MySessionListener: " + message);
out.close();
}
catch(Exception e)
{
out.close();
e.printStackTrace();
}
}
}
session.setAttribute("userName","creater")<br>
<% session.setAttribute("userName","creater");%>
session.setAttribute("userName","creater")<br>
<% session.setAttribute("userName","creater");%>
session.removeAttribute("userName","creater")<br>
<% session.removeAttribute("userName");%>
目前有<%=getServletContext().getAttribute("users")%>个用户。<br>
after session.invalidate()<br>
<% session.invalidate();%>
目前有<%=getServletContext().getAttribute("users")%>个用户。