哪几种情况可以如何销毁sessionn

HttpSession是干什么用的啊?能实现哪些功能? -
- ITeye技术网站
博客分类:
你听说过Session吗?
它是保存在服务器的一个标识,就想客户电脑上的Cookie。我们常见的网站管理员和普通用户之间就是用Session来区分的。
你所说的HttpSession是JSP中经常使用的一个方法,准确的说,是Request中的一个方法,比如。
Session = request.getSession(true);
用于获取Session
HttpSession 中可以跟踪并储存用户信息,把值设置到属性中,有2 个方法:
setAttribute(),getAttrribute();
例如:在一个方法中用session.setAttribute(“student”,student);在
session 中设置一个属性名为student,值为一个名为student 的对象。而后可在
同一session 范围内用getAttribute(“student”)取出该属性,得到student
对象。
HttpSession session=request.getSession();为什么不用response儿用request!
首先回答为什么分别是response和request这两个内置对象。
你得先明白你通过获取对象是做什么用的,是往哪用的。
第一个PrintWriter out=response.getWriter()
是想获得一个输出流,用来响应客户端发出的请求。所以想响应客户端必须用response
第二个HttpSession session=request.getSession()
是从客户端获得一个session的对象,这个对象包含客户端持有的相关信息用来区别每个客户端.既然是从客户端就必须用请求对象来获取,因为一般都是客户端向服务器端发出的一个请求.所以用request对象。
Cookie和session这个得分开来说
两个都可以用来存私密的东西,同样也都有有效期的说法。
区别在于。
session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以在cookie生成的时候设置进去。
1、cookie数据存放在客户的浏览器上,
session数据放在服务器上
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE
4、单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
lovejing007
浏览: 55155 次
NullPointException是运行时异常无法捕获到Nu ...哪几种情况可以销毁session(一般有3种)
1、超时(一般服务器设置超时时间为30分钟)服务器会销毁session;2、点击控制台的红色按钮异常关闭服务器要销毁session3、手动调用session的invalidate方法sessio
上微信头条,C币就是你的
CSDN社区之星徐宜生:爱分享、爱极客!
最流行的语言想学就学
写博文,传代码,赚C币
哪几种情况可以销毁session(一般有3种)
1、超时(一般设置超时时间为30分钟)会销毁session;
2、点击控制台的红色按钮异常关闭服务器要销毁session
3、手动调用session的invalidate方法session.invalidate();
注意如果服务器正常关闭不会销毁
服务器正常关闭不销毁session,()session会存到我们的硬盘中,,也就是我们正常的点击stop server()会在tomcat的work的Catalina\localhost\项目名称下面生成一个文件SESSIONS(执行序列化),当服务器再次启动的时候会加载此文件(反序列化),倘若没有实现序列化接口(Serializable)可能会报错因为序列化和反序列化会依据一个id:
private static final long serialVersionUID = 1L;
上一篇转载:struts2 中的 addActionError 、addFieldError、addActionMessage方法的区别
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
你最喜欢的在日常的web开发中,我们经常需要用到一些关于会话处理的知识,今天在这里就讨论一下关于在用户退出网站时候的关于session销毁的问题。
session的销毁,php为我们提供了一个session_destroy()函数,我们都知道$_SESSION是一个数组,那么既然是数组,我们就可以用unset来删除。
首先说一下$_SESSION数组,我们每次通过访问$_SESSION数组里面的值其实都有一个我们没看到的过程,这个过程就是每次php都需要首先从对应的session文件中去读出这个文件里的session信息,放到$_SESSION数组里面,然后我们开始使用这个数组。那么在我们需要删除的session信息的时候,我们想要删除的其实不是这个session数组,我们想要做的是删除这一切有关的信息,包括$_SESSION数组里面的信息,保存在服务器端的session文件以及保存在客户端cookie里面的sessionID,其实要删除保存在客户端的sessionID删除客户端的cookie就可以了。
下面我们来说具体情况,最简单的是你想到用unset删除$_SESSION数组,这个时候你做的仅仅是删除了$_SESSION数组,这个时候保存在服务器端的session文件没有删除,里面的信息依然完好,客户端的cookie也没有被删除,这种情况下在使用$_SESSION数组注册session信息已经不可能了,也就是说你注册的信息不会被写入session文件,在别的页面当然也就不能使用。第二种情况是你使用session_destroy()函数,这个时候你所做的其实是彻底删除了保存在服务器端的session文件,在执行session_destroy()函数以后,还可以引用$_SESSION数组里面的值,这不是期望的结果;正确的做法是我们首先通过$_SESSION数组清空保存在服务器端session文件里面的信息,然后删除客户端的cookie,然后彻底删除session即执行session_destroy()函数。
完整做法的代码:
session_start();//启用session
$_SESSION=array();//清空session文件里面的内容
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-3600,'/');//如果是基于cookie的session,删除保存在客户端的sessionID
session_destroy();//彻底删除session
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11727次
排名:千里之外
原创:20篇
转载:15篇
(5)(6)(5)(9)(7)(3)几种session存储方式比较
几种session存储方式比较
发布时间: 21:50:26
编辑:www.fx114.net
本篇文章主要介绍了"几种session存储方式比较",主要涉及到几种session存储方式比较方面的内容,对于几种session存储方式比较感兴趣的同学可以参考一下。
集群中session安全和同步是个最大的问题,下面是我收集到的几种session同步的方案,希望能通过分析其各自的优劣找出其适应的场景。
1. 客户端cookie加密
这是我以前采用的方式,简单,高效。比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现。
问题:session中数据不能太多,最好只有个用户id。
参考实现:http://rollerweblogger.org/
2. application server的session复制
可能大部分应用服务器都提供了session复制的功能来实现集群,tomcat,jboss,was都提供了这样的功能。
性能随着服务器增加急剧下降,而且容易引起广播风暴;
session数据需要序列化,影响性能。
如何序列化,可以参考&对象的序列化和反序列化&.
Tomcat 5集群中的SESSION复制一
Tomcat 5集群中的SESSION复制二
应用服务器-JBoss 4.0.2集群指南
3. 使用数据库保存session
使用数据库来保存session,就算服务器宕机了也没事,session照样在。
程序需要定制;
每次请求都进行数据库读写开销不小(使用内存数据库可以提高性能,宕机就会丢失数据。可供选择的内存数据库有BerkeleyDB,Mysql的内存表);
数据库是一个单点,当然可以做数据库的ha来解决这个问题。
4. 使用共享存储来保存session
和数据库类似,就算服务器宕机了也没事,session照样在。使用nfs或windows文件共享都可以,或者专用的共享存储设备。
程序需要定制;
频繁的进行数据的序列化和反序列化,性能是否有影响;
共享存储是一个单点,这个可以通过raid来解决。
5. 使用memcached来保存session
这种方式跟数据库类似,不过因为是内存存取的,性能自然要比数据库好多了。
程序需要定制,增加了工作量;
存入memcached中的数据都需要序列化,效率较低;
memcached服务器一死,所有session全丢。memchached能不能做HA? 我也不知道,网站上没提。
应用memcached保存session会话信息
正确认识memcached的缓存失效
扩展Tomcat 6.x,使用memcached存放session信息
6. 使用terracotta来保存session
跟memcached类似,但是数据不需要序列化,并且是Find-Grained Changes,性能更好。配置对原来的应用完全透明,原有程序几乎不用做任何修改。而且terracotta本身支持HA。
问题:terracotta的HA本身进行数据复制性能如何?
参考资料:
JVM-level clustering
Terracotta集群Tomcat实现Session同步
使用Terracotta和Tomcat建立ACTIVE-PASSIVE模式的集群
用Spring Web Flow和Terracotta搭建Web应用
Terracotta实战示例——集群RIFE
Terracotta近况:转向开源,接受度,Hibernate支持
本文标题:
本页链接:}

我要回帖

更多关于 session销毁方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信