精华内容
下载资源
问答
  • 判断一个session是否过期

    万次阅读 2009-01-21 15:48:00
    怎么判断session是否过期。1、实现HttpSessionListener接口,然后在sessionDestroyed()方法中执行一些操作,表示session要过期了,因为这方法是session.invalidate()之前监听器调用的方法。这判断的方法显然不能...

    怎么判断session是否过期。

    1、实现HttpSessionListener接口,然后在sessionDestroyed()方法中执行一些操作,表示session要过期了,因为这个方法是session.invalidate()之前监听器调用的方法。这个判断的方法显然不能让人满意。

    2、request.getSeesion(boolean)方法。这个方法参数boolean,这个值如果是true,那么如果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。如果参数是false,那么在request的当前会话不存在的时候就返回null。
    这个所谓的request的当前会话是否存在和session过期的联系,可以“近似地”认为session不存在就是session过期了,那么我们就可以很容易地判断session是否过期了。方法如下:
    if(request.getSession(false)==null)
       System.out.println("Session has been invalidated!");
    else
       System.out.println("Session is active!");

    不知是否有存在特别情况。
    这个特殊情况就是第一次请求还没有创建会话的时候,那么用这个方法返回的仍然是null。

     

    3、在session中保存特殊的字段来判断这个session是否过期

    展开全文
  • 一个判断session是否过期的小技巧

    千次阅读 2017-11-23 17:37:48
    1.session其实就是一个Map,键=值对,通过session.getAttribute("name");获得session中设置的参数   2.session的过期时间是从什么时候开始计算的?是从一登录就开始计算还是说从停止活动开始计算?  答:...

    Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下!

     

    1.session其实就是一个Map,键=值对,通过session.getAttribute("name");获得session中设置的参数

     

    2.session的过期时间是从什么时候开始计算的?是从一登录就开始计算还是说从停止活动开始计算?

       答:从session不活动的时候开始计算,如果session一直活动,session就总不会过期。

             从该Session未被访问,开始计时; 一旦Session被访问,计时清0;

     

    3.设置session的失效时间

     a)web.xml中

     

    Xml代码  收藏代码
    1. <session-config>    
    2.     <session-timeout>30</session-timeout>    
    3. </session-config>   

     b)在程序中手动设置

        session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期

    c)tomcat也可以修改session过期时间,在server.xml中定义context时采用如下定义:

    Xml代码  收藏代码
    1. <Context path="/livsorder" docBase="/home/httpd/html/livsorder"  
    2.   defaultSessionTimeOut="3600" isWARExpanded="true"  
    3.   isWARValidated="false" isInvokerEnabled="true"  
    4.   isWorkDirPersistent="false"/>  

     

    4.如何判断session过没过期

    request.getSeesion(boolean)方法,一下子让我恍然大悟。这个方法里面传了一个boolean值,这个值如果是true,那么如果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。如果参数是false,那么在request的当前会话不存在的时候就返回null。
    这样我们就可以很容易的联想到这个所谓的request的当前会话是否存在和session过期的联系,所以我们就可以“近似地”认为session不存在就是session过期了,那么我们就可以很容易地判断session是否过期了。方法如下:
    if(request.getSession(false)==null)
       System.out.println("Session has been invalidated!");
    else
       System.out.println("Session is active!");

    可能大家注意到我上面有一个“近似地”字眼,也就是说存在特别情况。
    这个特殊情况就是第一次请求还没有创建会话的时候,那么用这个方法返回的仍然是null,原因我想大家应该是显然的。


    [java] view plain copy
    1. private boolean checkSession(   HttpServletRequest request,  
    2. HttpServletResponse response) {  
    3. HttpSession session = request.getSession(false);  
    4. String requestURI = request.getRequestURI();  
    5. String contextPath = request.getContextPath();  
    6.   
    7. requestURI = requestURI.substring(contextPath.length());  
    8.   
    9. if(requestURI.equals("/") ||  
    10. requestURI.equals("/login.jsp") ||  
    11.     requestURI.equals("/login.do")  ||  
    12.     requestURI.equals(this.errorPage))  
    13. return true;  
    14.   
    15. if(session != null   
    16. && session.getAttribute(this.objName) != null   
    17. && session.getAttribute("year") != null)  
    18. return true;  
    19. else   
    20. return false;  
    21. }  



    比较好的一个办法

    [java] view plain copy
    1. //request.getSession(false)==null可以近似的判断是否过期:如果已经过期,那么返回的是null,但是当起一次请求,刚刚建立一个session的时候,上述方法也返回null   
    2. //所以应该这个做   
    3. if(null==request.getSession(false)){   
    4.    if(true==request.getSession(true).isNew()){   
    5.       }   
    6. else{   
    7. System.out.println("session已经过期");   
    8. }   
    9. }  
    展开全文
  • 前一段时间有好几个问题,提到怎么判断session是否过期。  接触jsp已经很久了,但是还真没有想过这个问题,当时也就没有找到一个满意的答案给人家。  当时,我提到一个方法,就是实现HttpSessionListener...



        前一段时间有好几个问题,提到怎么判断session是否过期。

        接触jsp已经很久了,但是还真没有想过这个问题,当时也就没有找到一个满意的答案给人家。

        当时,我提到一个方法,就是实现HttpSessionListener接口,然后在sessionDestroyed()方法中执行一些操作,表示session要过期了,因为这个方法是session.invalidate()之前监听器调用的方法。这个判断的方法显然不能让人满意。

        我当时问了些人,但是也没有得到一个准确的答案。

        正好偶然间看到,request.getSeesion(boolean)方法,一下子让我恍然大悟。这个方法里面传了一个boolean值,这个值

    如果参数true,那么如果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。

    如果参数是false,那么在request的当前会话不存在的时候就返回null。

        这样我们就可以很容易的联想到这个所谓的request的当前会话是否存在和session过期的联系,所以我们就可以“近似地”认为session不存在就是session过期了,那么我们就可以很容易地判断session是否过期了。方法如下:

        if(request.getSession(false)==null)

        System.out.println("Session has been invalidated!");

        else

        System.out.println("Session is active!");

        可能大家注意到我上面有一个“近似地”字眼,也就是说存在特别情况。

        这个特殊情况就是第一次请求还没有创建会话的时候,那么用这个方法返回的仍然是null,原因我想大家应该是显然的。

        以上是个人拙见,希望大家指正。

        原文转自:http://www.ltesting.net

    展开全文
  • if(request.getSession().isNew()){ //同步操作 System.out.println("是新的呀呀 呀"); synchronized(this){ count = load(file); count = count.add(new ... 为什么在servlet这段不执行呢?
  • 判断session是否过期

    千次阅读 2015-01-25 15:08:25
    判断session是否过期 ,做项目时发现 session.getLastAccessedTime() 抛出异常,session已过期但还是调用了该方法

    <pre name="code" class="java">package listener;
    
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Collections;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Timer;
    import java.util.TimerTask;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    
    import util.WriteTxt;
    
    
    
    public class SessionScanner implements HttpSessionListener,
    	ServletContextListener
    {
        //并发向集合中增加元素,通过Collections.synchronized构建线程安全的集合
        private static final List<HttpSession> SESSIONS = Collections
    	    .synchronizedList(new LinkedList<HttpSession>());
        //将增加方法和迭代方法放在一个同步代码块中,后面的两个同步代码块使用相同的锁旗标对象LOCK,防止并发异常
        private final static Object LOCK = new Object();
        //项目的根目录
        private static  String ROOT  ;
        
        
        public void sessionCreated(HttpSessionEvent se)
        {
        	
    	synchronized (LOCK)
    	{
    		
    	    SESSIONS.add(se.getSession());
    	}
        }
    
        public void sessionDestroyed(HttpSessionEvent se)
        {
    	//System.out.println("SessionScanner——Session摧毁了");
        }
    
        public void contextInitialized(ServletContextEvent sce)
        {
        	
        ROOT = sce.getServletContext().getRealPath("/");
    	//利用定时器来定时遍历这个集合中的所有 Session
    	Timer timer = new Timer();
    	timer.schedule(new TimerTask()
    	{
    	    public void run()
    	    {
    	    //有效的session数目,这里的有效通过session中是否有username来判断   
    		synchronized (LOCK)
    		{	
    			int num=0;
    		    //对集合的操作应该用迭代器来操作集合最合适
    		    Iterator<HttpSession> iterator = SESSIONS.iterator();
    		    while (iterator.hasNext())
    		    {	
    		    	
    		    	HttpSession session = iterator.next();
    		    	
    		    	//System.out.println(session.getLastAccessedTime());
    		    	//System.out.println(System.currentTimeMillis());
    		    	//得到 Session 的 lastAccessedTime 从而进行判断失效session
    		    	try
    		    	{	
    		    		//session有效且有 username就 num++,如果无效会抛出异常
    		    		if(session.getAttribute("username")!=null) num++;
    		    		//session超过20分钟没有活动,则注销
    		    		if (  System.currentTimeMillis()
    						- session.getLastAccessedTime()> 20*60*1000 )
    		    		{
    		    			session.invalidate();
    		    			iterator.remove();
    		    		}
    		    	}
    		    	//捕获到session已注销,但是还是 session.getLastAccessedTime 抛出的异常
    		    	catch(IllegalStateException e)
    		    	{
    		    		System.out.println("session已经注销过");
    		    		iterator.remove();
    		    	}
    		    	catch(Exception e)
    		    	{
    		    		System.out.println("session再次注销");
    		    		iterator.remove();
    		    	}
    			
    		    }
    		  
    		}
    		
    	    }
    	}, 0, 3*1000);
        }
    
        public void contextDestroyed(ServletContextEvent sce)
        {
        }
        
       
    }
    


    
    

    展开全文
  • 前一段时间有好几个问题,提到怎么判断session是否过期。接触jspo已经很久了,但是还真没有想过这个问题,当时也就没有找到一个满意的答案给人家。当时,我提到一个方法,就是实现HttpSessionListener接口,然后在...
  • Windows驱动中判断Session是否是远程Session 用户态调用GetSystemMetrics(SM_REMOTESESSION)就可以知道当前是否处于远程桌面环境。 内核态没有类似的函数,就需要通过其它的方法判断了。 首先使用...
  • 判断session是否有效

    千次阅读 2013-02-01 19:09:14
    本文链接:... 在以前的php 版本中,要判断session是否有效,只能用如下的方法: session_start(); if(isset($_session)) { echo "started"; } else { echo "not started"; }  而在
  • thinkphp中session 判断

    2015-12-09 16:37:00
    判断一个session是否已经设置,可以使用 session('?name'); 用于判断名称为name的session是否已经设置相当于: isset($_SESSION['name']); 转载于:...
  • Session判断用户是否登录

    千次阅读 2019-06-28 10:06:45
    开发工具与关键技术:VSSession作者:听民谣的老猫撰写时间:2019/6...我这判断用户登录状态是页面启动时就去Session中拿数据,如果拿的到数据的话try{}catch{}就捕获不到异常,如果try{}catch{}捕获到了异常就证明用...
  • 监听 session 判断用户是否在线

    千次阅读 2019-04-28 09:45:24
    方便发送消息,如果有新消息,设置 session 中有新消息 = true,前端每次轮询只需轮询 session 即可,无需访问数据库。 session 容器 存储已登录用户的 session public class LoggedOnSessionContext { ...
  • void Application_PreRequestHandlerExecute(object sender, EventArgs e) ... var passport= context.Session["username"]; if (passport==null) { context.Response.Redirect("~/login.aspx"); } } }
  • php判断session是否设置

    千次阅读 2017-06-04 21:08:38
    [php] view plain copy //设置fseek      if(isset($_SESSION["f_fseek_size"])){     }else{     //未设置   $_SESSION["f_fseek_size"]=0;   }
  • 如何正确判断Session变量是否存在

    万次阅读 热门讨论 2016-06-25 10:03:46
    前言:  有两个页面调用Controller中同一个方法,不同的是,部分变量...所以通过判断session是否有值来决定方法的变量是从哪里获取。 代码所写 if (Session["ExamID"].tostring == null) { studentinfo.ExamMa
  • php判断session是否处于开启状态

    千次阅读 2019-10-22 10:38:14
    直接上代码: ... * 判断session是否处于开启状态 * @Author yangshuiping * @DateTime 2019-10-22T10:09:45+0800 * @return boolean [description] */ function is_session_started() { if ( php_sa...
  • 比如我action中有个session ("sessionid","sessionValue") 、用struts标签获取:   二、 session也是内置对象之,可以直接用session,比request.getSession方便多了  也可以写成 三、el表达式获取:${...
  • JSP透过session判断用户是否登录

    千次阅读 2016-12-09 09:33:16
    JSP中判断session是否为空,如果为空则打开登录窗口    if(name!=null){%>  +显示内容         jsp中如何通过session判断用户是否登录  String username = session.getAttribute("username"); ...
  • jq 判断session是否为空

    千次阅读 2017-12-06 21:00:09
    首先我们来看session是由什么...由此看来session值是在_cookieCache对象里,所以我们不能直接对session进行判断,这里的判断我们要用到jq中的$.isEmptyObject方法,此方法返回值是Booleans(布尔值):true或者false
  • 判断session是否为空

    2013-11-20 16:05:57
    判断userInfo在session是否为空 Object obj = session.getAttribute("userInfo"); if(obj==null){}
  • JAVA判断session是否连接

    千次阅读 2013-10-23 11:55:43
    String pid = ""; try{  if(request.getSession(false)==null){ ... response.sendRedirect("./../error_session.jsp");  }    pid = (String)session.getAttribute("personid");  if(pid == null){

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 305,555
精华内容 122,222
关键字:

判断是否一个session内