session必须要销毁吗,为什么

session必须要销毁吗,为什么

本文目录

  • session必须要销毁吗,为什么
  • session销毁问题
  • php直接关闭页面怎么注销SESSION
  • 浏览器关闭后,Session就销毁了吗
  • php为什么要销毁session
  • 如何通过session_id销毁session
  • java的httpsession对象销毁前调用什么方法,我想在session销毁前把上传的文件删除了
  • 求教,jsp中session对象使用完之后需要手动销毁吗
  • jsp中的session怎么销毁
  • session过期很久也不销毁怎么办

session必须要销毁吗,为什么


======一般手动销毁是在退出登录状态的情况下的,所以不是必须要销毁的

  1. 我们利用HttpSessionListener 接口来监听session的创建和销毁,从下图可以看出,当我们关闭服务器时,session并没有调用他的sessionDestroyed方法.

 2.  即当我们关闭客户端浏览器时,Session并没有被销毁,还在服务器端,只不过客户端一旦把浏览器关闭掉以后,再去开一个新的窗口,之前的SessionID就再也访问不到了,因为SessionID是通过Cookie保存在浏览器进程中的,浏览器一旦关掉,所对应的Cookie也就消失了,当你把浏览器窗口关闭时,客户端并没有想服务器发送任何请求,服务器也收不到客户端提交过来的任何东西,所以服务器的那个Session依然还在那里存活着,当你在重新开一个窗口时,服务器会针对这个新的页面,发送一个新的SessionID,这个新的SessionID显然跟以前那个SessionID是不一样的,两者之间没有任何关系,这样客户端就会对应一个新的session上,而服务器端原有的那个会话则一直存在,一直等到超时,服务器端的session就销毁掉了。


session销毁问题


clear()可清空session
remove(“username“)可将username移除
关闭浏览器,session就会销毁

php直接关闭页面怎么注销SESSION


1、每个页面都必须开启session_start()后才能在每个页面里面使用session。
2、session_start()初始化session,第一次访问会生成一个唯一会话ID保存在客户端(是基于cookie保存的),用户下次访问时,session_start()会检查有没有会话ID,如果有浏览器会带着这个会话ID过来(通过发送头文件传过来的,这个可以用ff浏览器看到)来确定客户端。
3、给于cookie的session会在客户端保存一个会话ID即session_id,这个可以通过打印cookie看到,这个session_id的键值为session_name,
session_id()
==
$_COOKIE[session_name()]
4、如果客户端禁用了cookie,则必须用url传递session_id即给予URL的SESSION
5、注销SESSION时不能用unset($_SESSION),可以使用$_SESSION
=
array()或则$_SESSION
=
null,正确注销session的方法如下:
//正确的注销session方法:
//1开启session
session_start();

//2、清空session信息
$_SESSION = array();

//3、清楚客户端sessionid
if(isset($_COOKIE[session_name()]))
{
setCookie(session_name(),’’,time()-3600,’/’);
}
//4、彻底销毁session
session_destroy();

浏览器关闭后,Session就销毁了吗


答案:
存在于浏览器上的唯一标识符JSESSIONID(sessionid)消失了,但是服务器中存放的sessionid并没有立马销毁。
分析:
我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保存当前用户的状态信息,初学它的时候,认为Session的生命周期是从打开一个浏览器窗口发送请求到关闭浏览器窗口,但其实这种说法是不正确的!当一个Session开始时,Servlet容器会创建一个HttpSession对象,那么在HttpSession对象中,可以存放用户状态的信息,Servlet容器为HttpSession对象分配一个唯一标识符即Sessionid,Servlet容器把Sessionid作为一种Cookie保存在客户端的浏览器 中用户每次发出Http请求时,Servlet容器会从HttpServletRequest对象中取出Sessionid,然后根据这个Sessionid找到相应的HttpSession对象,从而获取用户的状态信息。
其实让Session结束生命周期,有以下两种办法:
一个是Session.invalidate()方法,不过这个方法在实际的开发中,并不推荐,可能在强制注销用户的时候会使用;
一个是当前用户和服务器的交互时间超过默认时间后,Session会失效。
我们知道Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送任何请求来关闭Session,自然Session也不会被销毁,但是可以做一点努力,在所有的客户端页面里使用js的window.onclose来监视浏览器的关闭动作,然后向服务器发送一个请求来关闭Session,但是这种做法在实际的开发中也是不推荐使用的,最正常的办法就是不去管它,让它等到默认的时间后,自动销毁。那么为什么当我们关闭浏览器后,就再也访问不到之前的session了呢?其实之前的Session一直都在服务器端,而当我们关闭浏览器时,此时的Cookie是存在于浏览器的进程中的,当浏览器关闭时,Cookie也就不存在了。
其实Cookie有两种:
一种是存在于浏览器的进程中;
一种是存在于硬盘上。
而session的Cookie是存在于浏览器的进程中,那么这种Cookie我们称为会话Cookie,当我们重新打开浏览器窗口时,之前的Cookie中存放的Sessionid已经不存在了,此时服务器从tpServletRequest对象中没有检查到sessionid,服务器会再发送一个新的存有Sessionid的Cookie到客户端的浏览器中,此时对应的是一个新的会话,而服务器上原先的session等到它的默认时间到之后,便会自动销毁。
附加:
当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;
当不在同一个窗口中打开相同的浏览器时,发送请求,仍是同一个session;
当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,是不同的session。

php为什么要销毁session


session_unset()
释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id
session_destroy()
删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留
因此,释放用户的session所有资源,需要顺序执行如下代码:
《?php
$_SESSION[’user’] = ’lowell’;
session_unset();
session_destroy();
?》也可以使用unset()销毁。一般在这几个语句都需要用户触发,比如用点 安全退出后,触发这几个销毁函数。自动销毁还需要左一个计划任务,来定时触发,或者页面监控触发,比如设个全局变量,当页面进来的时候,这个全局变量设置为true,每当退出的时候,检查这个全局变量是否存在并为true,如果不是就执行销毁函数。

如何通过session_id销毁session


session.removeAttribute(“username“); //注销session中的username对象
session.removeAttribute(“id“); //注销session中的id对象
session.invalidate(); //关闭session

java的httpsession对象销毁前调用什么方法,我想在session销毁前把上传的文件删除了


销毁session的两种方法。
1、session.removeAttribute()可以指定销毁session中的某个属性
2、session.invalidate()是让当前浏览器的session销毁,也就是一个session被销毁,比如用户登录后注销就用这个,因为注销意味着该用户session中的所有属性均失效。
销毁session前把上传的文件删除,这个就看你是什么样的业务逻辑了。比如用户注销的功能,当用户点击注销时触发方法 你可以先销毁session再删除文件,也可以删除文件之后销毁session。这个就看你自己是怎么写的了。

求教,jsp中session对象使用完之后需要手动销毁吗


不需要手动销毁,他会自动销毁的,但你关闭浏览器并不会因为会话结束而销毁session,每个session都有一个自己的id,你关闭浏览器只是丢失了这个id与你浏览器的连接,不信你可以自己创建session之后把tomcat或者jboss关闭看看,session文件还是可以找到的。

jsp中的session怎么销毁


嗨,伤心了,Session的创建和销毁不是说过吗?当客户端发出第一个请求时(不管是被访问网站的任何页面)就会在此站点的服务其中开辟一块内存空间,这块内存就是session,session的销毁有两种方式,一种是session过期时间已到,会自动销毁(注意这里不是马上就会销毁,具体销毁时间由Tomcat容器所决定)。在我们项目中的web.xml中就可以配置:
《session-config》
《session-timeout》30《/session-timeout》
《/session-config》
表示设置session过期时间为30分钟。值得注意的就是上面说的即使30分钟到了session不一定会马上销毁,可以通过session监听器测试得到每次session销毁的时间都不一样。如果要想安全的话就用下面第二种方法。在Tomcat的conf文件夹中的web.xml中可以找到Tomcat默认的session过期时间为30分钟。如果我们在我们的站点中配置了session过期时间Tomcat容器会以站点配置为主,如果我们没有在站点中配置session过期时间,将会以Tomcat下conf文件夹下的web.xml文件中配置的session过期时间为准。
第二种销毁方式通过手工方式销毁,这种销毁方式会立刻释放服务器端session的资源,我们手动销毁可以通过session().invalidate();实现。

session过期很久也不销毁怎么办


通常来说,session过期后,session交给服务器容器决定何时销毁。
有必要的情况下我们可以手动销毁(session.invalidate();)。
提示:你可以通过session监听器来监测的session是否被销毁。

推荐阅读