一、问题:Session的销毁方式到底有哪些
1、Session,作为我们离不开的后台的技术,它的出现主要是为了解决 Http协议的无状态特点,用于解决用户状态的存储问题,而往往对于存储来说都会涉及到一个时间问题,下面我们来看看它的销毁方式到底有哪些。
2、当客户端第一次请求 servlet并且操作 session
3、时,session对象生成,以 Tomcat为例,Tomcat中 session默认的存活时间为
4、 30min,即你不操作界面的时间,一旦有操作,session会重新计时。那么 session的默认时间可以改么?答案是肯定的。可以在
5、 Tomcat中的 web.xml文件中进行修改。如下图:
6、当然除了以上的修改方式外,我们也可以在程序中自己设定 session的生命周期,通过 session.setMaxInactiveInterval(int);来设定 session的最大不活动时间,单位为秒。
7、 HttpSession session=req.getSession();session.setMaxInactiveInterval(5);
8、当然我们也可以通过 getMaxInactiveInterval();方法来查看当前 Session对象的最大不活动时间。
9、或者我们也可以通过 session.invalidate();方法让 session立刻失效。
10、实现,因为不同用户访问服务器要判别到底是使用哪个 session,所以当用户第一次访问服务器的时候往往会把一个 session id通过
11、 cookie存储到用户端,并且该 cookie的有效时间为关闭浏览器,从而 session在浏览器关闭时也相当于失效了(因为没有
12、 session id再与之对应)。如下图,关闭后再打开,重新给浏览器分配了个 session id。
13、需要注意的是这里只是 cookie失效了,你再访问相当于服务器把你当成了新用户,又给你创建了一个 session,并没有把之前的 session对象销毁。
14、当非正常关闭服务器时,session销毁;当正常关闭服务器时,session将被序列化到磁盘上,在工作空间 work目录下的 SESSION.ser文件中,如果对象被保存在了 session中,服务器在关闭时要把对象序列化到硬盘,这个对象就必须实现 Serializable接口,下次启动服务时,自动加载到内存。如下图,正常关闭后可以看到文件夹中多了一个 SESSIONS.ser文件,再次启动服务器则文件消失。
15、从图中除了看到 Cookie的名称和内容外,我们还需要关心一个信息,到期时间,到期时间用来指定该 cookie何时失效。默认为当前浏览器关闭即失效。我们可以手动设定 cookie的有效时间(通过到期时间计算),通过 setMaxAge(int expiry);方法设定 cookie的最大有效时间,以秒为单位。
16、大于 0的整数,表示存储的秒数;若为负数,则表示不存储该 cookie;若为 0,则删除该 cookie。
17、负整数:cookie的 maxAge属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie就会消失。
18、正整数:表示 cookie对象可存活指定的秒数。当生命大于 0时,浏览器会把 Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活相应的时间。
19、零:cookie生命等于 0是一个特殊的值,它表示 cookie被作废!也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie的 setMaxAge(0)来删除这个 Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie。
二、c#销毁session
1、B/S程序都是有客服端发出请求服务器处理请求,不可能做到由服务器发出指令给客服端,所以你要做这个功能的话只能写一个方法,定时向服务器查询这一用户信息,当你修改了某一用户信息时,在服务端保存一个状态,你定是的查询这个状态,然后返回给客服端处理,大概思路就这样了
2、高级一点的话也许可以用TCP/IP编程来解决,但我没做过,所以给不了你什么好的意见
3、思路都这么清晰了,你还要代码啊,你在用户(user)表里面多加一列(如:change此列默认为false),当admin修改了某一个用户的信息时,修改此用户的change列的值为true,然后你在页面写一个方法,根据当前用户的username检索此用的change的值,然后你判断这个值,当值为false时则不做任何处理,直接return,当值为true时则清空session的值,并跳转到login页面,至于这个方法在什么时候调用,就是你自己的需要了,明白了?
三、在html页面写销毁session
1、LZ,我无语。<%%>是后台脚本,只有在页面初始化才会运行。而且他一般不调用void类型方法,而是用来返回值。既然只有初始化才能调用何必写在前台?后台不就行了。你那个exit.onclick是点击的页面按钮吧,你无非就是想点击那个按钮执行后台的方法,这个只有用ajax才能实现,如果用你那个方法就行,那ajax就没存在的意义了。而且据我所知,你应该用的.net吧,用ajax销毁session并不那么容易。
2、遇到这种问题,我建议你用另外一种方法,这也是我经常用的方法,新建一个页面,在里面写一个销毁session的方法,然后在主页面添加一个iframe并隐藏它,当你要销毁的时候,给ifranme赋值src属性(一句代码足以),js会自动加载ifranme,就达到了销毁session的目的。而且,如果你其他页面需要销毁session,只需要用同样的方法,这样既减少了代码量,也不需要在每个页面写繁琐的ajax。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!