session会消耗服务器资源,我想对频繁刷新的用户关闭他的session.
就是服务器,不再为他浪费一部分内存.
session.invalidate()不行似乎只是清除了session中所有的内容,我是想对这个连接不在产生session,主要是为了节约服务器资源
.
<%@page session="false"%>是不是也不行啊?
我觉得<%@page session="false"%>好象只是让这个页面不能使session了.我的目的就是session会耗资源,谁老刷新,就不给他产生session,节约服务器资源!
就是服务器,不再为他浪费一部分内存.
session.invalidate()不行似乎只是清除了session中所有的内容,我是想对这个连接不在产生session,主要是为了节约服务器资源
.
<%@page session="false"%>是不是也不行啊?
我觉得<%@page session="false"%>好象只是让这个页面不能使session了.我的目的就是session会耗资源,谁老刷新,就不给他产生session,节约服务器资源!
是不是只清除session中存的一个对象啊?
我想达到的是,服务器不为这个连接产生session,浪费内存.
就好象session.close一下服务器把存这个连接的session的内存清了~这个连接没有session占内存了
<%@ 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又产生了
只要一次request就会产生一个session.request.getSession().和你消灭的session不一样。
你可以把sessionId打印出来或者把hashcode打印出来对比一下。不一样的。
session是服务器控制的。应该不能取消session.
你不想要session,就设置web.xml里的
<session-config>
<session-timeout>0</session-timeout>
</session-config>
<%=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失效代表什么啊?
try{
Thread.sleep(1000 * 3);
}catch(Exception e) {
e.printStackTrace()
}
又得到一个session的id不同,
但刷新以后session的id就相同了.代码如下
<%HttpSession s2=request.getSession(true); %>
<%=s2.getId()%>
<%s2.invalidate(); %>
<%HttpSession s3=request.getSession(true); %>
<%=s3.getId() %>第一次访问的结果是
aWTekOtBry25ruGv2n aGJEBV3qy5daruGv2n
刷新一下就变成aGJEBV3qy5daruGv2n aGJEBV3qy5daruGv2n 为什么?
本来以为自己看懂了,但一看大家的回复又迷糊了
lz是否要对某一个访问不分配session,这好像不太可能,对一个请求分配session是web服务器的行为。若是同一个浏览器内的不停刷新是不会创建新的session。
就算是多个浏览器的话,你也是无法区分是它是多台机器的不同访问
还是同一台机器的多个浏览器访问。
我目前是这样
if(刷新次数过多)
session.invalidate()
比如说我整个办公室的全部都是共用一个外网ip,
若是我们每个人都访问你的站点,服务器端接受到的访问就是同一个ip,
但我们明明是不同的访问者,你若根据ip来,那岂不是拥有我们所有人共只能访问一次。
我不太明白你干嘛要禁止别人涮新呢
只是在jsp 转换的servlet中没有定义HttpSession这个变量,
还是可以通过request.getSession() 来获得的
javax.servlet.http.HttpSession session = request.getSession(true);Session还是Session.我想的就是要是有人疯狂连接,刷新~我能最大限度的节约资源
也就是在一个浏览器内不停的刷新,不会创建多余的session,
他不停的刷新和不停的点击某个链接是一回事。
而且刷新根本没必要去避免。
因为就算你invalidate它的session,它再次刷新还是会产生一个新的session.你怎么唯一确认这个用户,ip是肯定不行的。换个思路,让它的session保留,发现他刷新就转向另一个页面。
可以计算在某个时间内比如1分钟内他的刷新率有多少来判断。设定一个Timer的时间,判断这个session是不是这个用户的session,是就转向静态页面,提示它刷新过快。
已经完全可以了,其他的工作就不是你能处理的了,而且其他的工作也都由GC代劳了啊
这个是正解.
我知道啊~
___________________________________________________________________________
你应该从你的设计思路上解决,就算你把掉,他再发请求的时候又会生成一个标识他的id,这样更加增大了消耗!实际上你不给session赋值的话 并不占服务器资源,你应该好好理解一下session的意义!
----------------------------------------------------------------------
实际上我就是这个意思,只要是指定的IP有request我就不维护它的session,它刷一次我就close它的session一次