session会消耗服务器资源,我想对频繁刷新的用户关闭他的session.
就是服务器,不再为他浪费一部分内存.
session.invalidate()不行似乎只是清除了session中所有的内容,我是想对这个连接不在产生session,主要是为了节约服务器资源
.
<%@page session="false"%>是不是也不行啊?
我觉得<%@page session="false"%>好象只是让这个页面不能使session了.我的目的就是session会耗资源,谁老刷新,就不给他产生session,节约服务器资源!

解决方案 »

  1.   

    session.removeAttribute(String name);
      

  2.   

    session.removeAttribute(String name);
    是不是只清除session中存的一个对象啊?
    我想达到的是,服务器不为这个连接产生session,浪费内存.
    就好象session.close一下服务器把存这个连接的session的内存清了~这个连接没有session占内存了
      

  3.   

    正确的做法不是不给他session,而是,如果发现他频繁刷新,就把请求重定向到一个提示页面,以此来减少他的刷新请求。或者是,在这样的请求到来的时候,sleep一段时间,让他很长时间才能看到结果,而sleep的这段时间,正好可以把CPU资源让给其他请求。
      

  4.   

    到是没试过让jsp页面sleep,我多线程不灵光啊~
      

  5.   

    首先,我想在性能考虑上,一个空的SessionID并不会浪费多少内存,主要的还是其它部分,另外Session的管理是否存在一定的问题,是否将太多的东西存储于Session中?一般Session中只存一下引用即可,使用管理代码管理Session数据是比较优化的方案。
      

  6.   

    Session中还没有存任何东西,就是想关了他
      

  7.   

    有两个问题请各位大侠解释一下
    <%@ page session="false"%> 这个标签有什么用处?是这个页面不能用session,还是不产生session.
    如果我访问的第一个页面就有<%@ page session="false"%>那是不是在离开这个页面之前还没有产生<%@ page session="false"%>?我看了一些资料,似乎在没有用到session之前session还没有产生,服务器也没有存session?
    我写了各个页面
    <%session.invalidate();%>
    <%HttpSession s=request.getSession(false); %>
    <%=s %>
    <%=session %>打印为null 和 SessionImpl[avxW36XZrCpfGW2J1n] 
    所以我觉得session.invalidate()把session消灭了,但是不知道它消没消灭服务器中的session.
    然后调用session,session又产生了
      

  8.   

    session.invalidate就行。
    只要一次request就会产生一个session.request.getSession().和你消灭的session不一样。
    你可以把sessionId打印出来或者把hashcode打印出来对比一下。不一样的。
    session是服务器控制的。应该不能取消session.
    你不想要session,就设置web.xml里的
    <session-config>
        <session-timeout>0</session-timeout>
      </session-config>
      

  9.   

    <%=session.getId() %><br><%=request.getSession(false) %><br><%session.invalidate();%>
    <%=request.getSession(false)%><br><%HttpSession s=request.getSession(false); %>
    <%=session.getId() %><br><%HttpSession s2=request.getSession(true); %>
    <%=s2.getId() %><br>
    显示为:
    aFjAfs4MGgN8zif31n
    SessionImpl[aFjAfs4MGgN8zif31n]
    null
    aFjAfs4MGgN8zif31n
    aEE0y5Xr6C9gzif31n是不是说我不能让Session不产生?只要有请求就有request就会有Session?
    session.invalidate是有什么用?只是让session的一些方法不能使用了?session失效代表什么啊?
      

  10.   

    多线程很简单,只需要在你判断该用户在刷新之后写上这个语句就可以了
    try{
    Thread.sleep(1000 * 3);
    }catch(Exception e) {
    e.printStackTrace()
    }
      

  11.   

    为什么Session.invalidate()后request.getSession(true),
    又得到一个session的id不同,
    但刷新以后session的id就相同了.代码如下
    <%HttpSession s2=request.getSession(true); %>
    <%=s2.getId()%>
    <%s2.invalidate(); %>
    <%HttpSession s3=request.getSession(true); %>
    <%=s3.getId() %>第一次访问的结果是
    aWTekOtBry25ruGv2n    aGJEBV3qy5daruGv2n 
    刷新一下就变成aGJEBV3qy5daruGv2n aGJEBV3qy5daruGv2n 为什么?
      

  12.   

    session.invalidate()不行似乎只是清除了session中所有的内容,我是想对这个连接不在产生session,-------------
    本来以为自己看懂了,但一看大家的回复又迷糊了
    lz是否要对某一个访问不分配session,这好像不太可能,对一个请求分配session是web服务器的行为。若是同一个浏览器内的不停刷新是不会创建新的session。
    就算是多个浏览器的话,你也是无法区分是它是多台机器的不同访问
    还是同一台机器的多个浏览器访问。
      

  13.   

    谢谢大家的关注~我想的是服务器会维护每个访问的session,我想达到的是如果一个IP频繁刷新,就不维护他的session了.
    我目前是这样
    if(刷新次数过多)
       session.invalidate()
      

  14.   

    我理解的是,只要有访问,服务器就会为这个访问维护或建立session ,我想的是session建立以后,马上告诉服务器关闭这个session,不用为这个访问维护session
      

  15.   

    根据ip来显然不太合理
    比如说我整个办公室的全部都是共用一个外网ip,
    若是我们每个人都访问你的站点,服务器端接受到的访问就是同一个ip,
    但我们明明是不同的访问者,你若根据ip来,那岂不是拥有我们所有人共只能访问一次。
    我不太明白你干嘛要禁止别人涮新呢
      

  16.   

    <%@ page session="false"%>
    只是在jsp 转换的servlet中没有定义HttpSession这个变量,
    还是可以通过request.getSession() 来获得的
      

  17.   

    我知道~<%@ page session="false"%>只是控制这句
    javax.servlet.http.HttpSession session = request.getSession(true);Session还是Session.我想的就是要是有人疯狂连接,刷新~我能最大限度的节约资源
      

  18.   

    一个浏览器内是共享一个sessionid的,
    也就是在一个浏览器内不停的刷新,不会创建多余的session,
    他不停的刷新和不停的点击某个链接是一回事。
    而且刷新根本没必要去避免。
      

  19.   

    lz说的不能做到的。
    因为就算你invalidate它的session,它再次刷新还是会产生一个新的session.你怎么唯一确认这个用户,ip是肯定不行的。换个思路,让它的session保留,发现他刷新就转向另一个页面。
    可以计算在某个时间内比如1分钟内他的刷新率有多少来判断。设定一个Timer的时间,判断这个session是不是这个用户的session,是就转向静态页面,提示它刷新过快。
      

  20.   

    session.invalidate
    已经完全可以了,其他的工作就不是你能处理的了,而且其他的工作也都由GC代劳了啊
      

  21.   

    在页面加个计数器,当在设置的时间内,超过多少次,就把这个session关掉,这样便能解决上述问题
      

  22.   

    session.invalidate()让session立即失效
      

  23.   

    session是一个用户登陆的时候分配的一个唯一标识的回话id,是不可能避免出现的,除非你规定了应用程序不使用session,多线程也是不可取的,jsp的程序本身是线程安全的,因为每个操作都有一个确切的结果,使用多线程增加了出现错误的风险,你应该从你的设计思路上解决,就算你把session remove掉,他再发请求的时候又会生成一个标识他的id,这样更加增大了消耗!实际上你不给session赋值的话 并不占服务器资源,你应该好好理解一下session的意义!
      

  24.   

    刷新页面并不会产生多大的SESSION的操作,每个浏览器窗口都会创建一个session ID,服务器段使用这个ID来鉴别服务器上的SESSION和客户端的对应关系,你刷新页面并不会产生新的session
      

  25.   

    当客户端发出一个请求时,服务器给客户端分配一个sessionId,同时发送给客户端,将Id保存在客户端自已生成一个cookie中,如果在同一个会话中,在客户再一次发送请求时在,就不另产生session,超出规定的时间后,再发送请求时,就会重新分配session.(个人看法,请多多指教!)
      

  26.   

    刷新页面并不会产生多大的SESSION的操作,每个浏览器窗口都会创建一个session ID,服务器段使用这个ID来鉴别服务器上的SESSION和客户端的对应关系,你刷新页面并不会产生新的session----
    这个是正解.
      

  27.   

    你刷新页面并不会产生新的session__________________
    我知道啊~
    ___________________________________________________________________________
    你应该从你的设计思路上解决,就算你把掉,他再发请求的时候又会生成一个标识他的id,这样更加增大了消耗!实际上你不给session赋值的话 并不占服务器资源,你应该好好理解一下session的意义!
    ----------------------------------------------------------------------
    实际上我就是这个意思,只要是指定的IP有request我就不维护它的session,它刷一次我就close它的session一次