网站一般都是利用session来保存用户的数据的。比如用户登陆后就可以用session来保存用户信息。但有个问题,就是用户登陆网站后,一段时间不进行操作。session会因为超时而给销毁掉。现在我想实现:只要用户还在网站上,浏览器打开了网站的页面。就算不进行任何的操作,用户的session都不会被销毁。而且该实现不能影响网站的性能。

解决方案 »

  1.   

    默认好像是20分钟。可以改改。要不把对象放在application里算了,呵呵
      

  2.   

    tomcat 配置文件里面 修改默认值就行了一直想不销毁的话  就用Application
      

  3.   

    放在application会造成很多用户的数据不被销毁。浪费内存
    我主要是想实现,只要用户打开了网站的任意页面,就算不进行任何的操作,对应的session就不会被销毁。也就是说这个页面会自动定时的去发送请求,以确保session一直存在。而这种请求对服务器造成的负担又必须降到最低
      

  4.   

    保持session本身就会占用一定的资源,这对有高访问量的网站肯定会对性能产生影响,所以你提出的是个矛盾的问题。除非你采用Cookie,要判断客户端是否接受Cookie,这样就能用户登入其他页面也能记录。
      

  5.   

    我不想让session占用内存。只要用户关闭浏览器,session 3分钟后就被销毁。但只要用户停留在网站上.session就一直存在。
    楼上的方法是让session一直存在。很不可取的做法。或是说对于我这个具体的项目很不可取
      

  6.   

    做一个线程,每隔一段时间就发个请求,维护一下session。
      

  7.   

    对哈`用ajax...
    每个10分钟给web服务器发送一个请求..这样session就不会被销毁.
    当你关掉ie,请求无法发送,自然也就销毁了.
      

  8.   

    10,11楼没有可行性,楼主可以先设置session永不过期,但是在用户关闭浏览器的时候[既所有页面也被关闭],的时候将session销毁,如何知道页面全部被关闭了呢,可以在页面初始方法里做个计数器,计算打开页面数量,关闭的时候,将计时器递减,当计时器为0,则在代码里面手动销毁session,否则就不过期。这仅是个建议,没有试过。
      

  9.   

    楼主不妨这样:
    在页面里放置一iframe(可利用CSS将其隐藏),iframe的src指向一个.jsp页面(例如叫a.jsp),可以定期刷新a.jsp页面,
    最好在a.jsp里写一句:
    //我是搞ASP.NET和ASP的,JSP我不会,下面只是我的一个思路:
    session["Save"]="Keep";
      

  10.   

    关闭浏览器后,待超过系统对Session的设定超时时间后,session就自动释放了。
      

  11.   

    用cookie只能在本地保存sid,但这个并不能决定服务器上session的时间,不知道就不要说
      

  12.   

    session完全有web容器管理,最多可以让session失效,手动创建、修改、延长session的时间是不可能的。
    只有修改web容器的配置文件。
      

  13.   

    如果不定时销毁session,你的服务器会支撑不了的
      

  14.   

    session 作为HttpSession的对象,它的结束方式有三种:
    1.关闭浏览器,关闭session,也就是session这个进程被结束掉
    2.调用HttpSession的invalidate()方法,删除HttpSession对象和数据,通常此方法用于“注销”
    3.两次访问时间接安格大于session定义的,非活动时间间隔,通常默认时间是1800秒根据楼主的叙述的情况,您可以通过修改该Session的默认配置来实现您的要求,具体操作如下:如果服务器是tomcat: 
    在conf目录下的web.xml文件中有配置: 
    <session-config> 
    <session-timeout>60</session-timeout> 
    </session-config> 
    60代表一小时,也就是60分钟 
    默认不默认都是通过配置的,配置成多少,默认就是多少 
      

  15.   

    ajax并不能完全保证session最好,ajax加隐藏frame自动刷新来解决
    注意发送ajax的时候加时间戳避免缓存问题
    隐藏的frame页面也要设置不缓存
      

  16.   

    长时间不销毁会出问题的!你可以将登陆信息用setAttribute保存下来.
      

  17.   

    很谢谢各位的意见。可能有些朋友还没看清楚。我已经说过设置配置文件,手动的延长session时间是不可取的。
    我的需求:用户登陆后只要关闭浏览器,或是浏览器中关闭了所有网站的网页(没有执行登出操作的)在3分钟后对应的session就会被销毁。因为这段时间用户没有再往服务器发送请求,session超时(3分钟这个时间已经在配置文件中设置)。
    而只有用户的浏览器中还打开了至少一个网站的网页,每个网站的网页中都有这个功能:定期的访问网站,以维护对应的session。
    这样做的目的是:用户打开网页一段时间不操作,等回头来执行某些操作时,服务器还能从对应的session中获取到其信息。而不用重新new session。再从数据库中获取这些信息。还能记录用户的在线时间。
    综合如上所述:我觉得16,跟26楼的朋友的意见比较符合我的要求
      

  18.   

    session.setMaxInactiveInterval(-1) 保证session一直有效
    每个用户登陆都会有一个sessionID
    当这个用户退出系统的时候,你可以把这个session给kill掉就可以了
      

  19.   

    我曾经给一个客户做过和你的需求一样,ajax加ifame隐藏刷新一起弄的,单靠一个发现有时候不行。
    iframe中的页面刷新的脚本是靠
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 
    <META HTTP-EQUIV="Expires" CONTENT="0"> 
    <meta http-equiv="Cache-Control" content="must-revalidate" forua="true" />
    <META HTTP-EQUIV="REFRESH" CONTENT="2;url=地址">ajax刷新不写了你自己写吧,不难,没用过的话我博客里面也有ajax调用的例子。注:以上META 是我刚刚随意搜出来的没有测试过。